add blog
This commit is contained in:
parent
4fb09afcc8
commit
fa7b8eba40
14
src/App/Components/BlogPost.js
Normal file
14
src/App/Components/BlogPost.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import Spinner from 'react-spinkit';
|
||||||
|
|
||||||
|
class BlogPost extends React.Component {
|
||||||
|
|
||||||
|
render(){
|
||||||
|
|
||||||
|
return(<h3>Specific Post</h3>);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = BlogPost;
|
@ -10,6 +10,7 @@ class Menu extends React.Component {
|
|||||||
<MenuItem route="app" text="Home" />
|
<MenuItem route="app" text="Home" />
|
||||||
<MenuItem route="gitrepos" text="Github Repos" />
|
<MenuItem route="gitrepos" text="Github Repos" />
|
||||||
<MenuItem route="hosting" text="Hosting" />
|
<MenuItem route="hosting" text="Hosting" />
|
||||||
|
<MenuItem route="blog" text="Blog" />
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
14
src/App/Components/RecentPosts.js
Normal file
14
src/App/Components/RecentPosts.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import Spinner from 'react-spinkit';
|
||||||
|
|
||||||
|
class RecentPosts extends React.Component {
|
||||||
|
|
||||||
|
render(){
|
||||||
|
|
||||||
|
return(<h3>Recent Posts</h3>);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = RecentPosts;
|
@ -6,11 +6,13 @@ import Layout from './Layout';
|
|||||||
import Home from '../Views/Home';
|
import Home from '../Views/Home';
|
||||||
import Gitrepos from '../Views/Gitrepos';
|
import Gitrepos from '../Views/Gitrepos';
|
||||||
import Hosts from '../Views/Hosts';
|
import Hosts from '../Views/Hosts';
|
||||||
|
import Blog from '../Views/Blog';
|
||||||
|
|
||||||
var routes = (
|
var routes = (
|
||||||
<Route name="app" path="/" handler={Layout}>
|
<Route name="app" path="/" handler={Layout}>
|
||||||
<Route name="gitrepos" handler={Gitrepos}/>
|
<Route name="gitrepos" path="gitrepos" handler={Gitrepos}/>
|
||||||
<Route name="hosting" handler={Hosts}/>
|
<Route name="hosting" path="hosting" handler={Hosts}/>
|
||||||
|
<Route name="blog" path="blog" handler={Blog} />
|
||||||
<DefaultRoute handler={Home}/>
|
<DefaultRoute handler={Home}/>
|
||||||
</Route>
|
</Route>
|
||||||
);
|
);
|
||||||
|
13
src/App/Views/Blog.js
Normal file
13
src/App/Views/Blog.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import BlogPost from '../Components/BlogPost';
|
||||||
|
import RecentPosts from '../Components/RecentPosts';
|
||||||
|
|
||||||
|
class Blog extends React.Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<RecentPosts />
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Blog;
|
@ -18,7 +18,6 @@ class Home extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
<div className="card-action red-text">
|
<div className="card-action red-text">
|
||||||
<a href="https://docs.google.com/document/d/1ykS2_34-GQd0SbrjpG9NbBvq40L62qWxGJc43KAjOD8/edit?usp=sharing">View Resume</a>
|
<a href="https://docs.google.com/document/d/1ykS2_34-GQd0SbrjpG9NbBvq40L62qWxGJc43KAjOD8/edit?usp=sharing">View Resume</a>
|
||||||
<a href="https://docs.google.com/document/d/1t6RkVRZ6VeWQ5Bug9i6cWdKViiCW9oYN37UuU5jcolw/edit?usp=sharing">View References</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
605
src/build/app.js
605
src/build/app.js
File diff suppressed because it is too large
Load Diff
10
src/node_modules/babel-core/node_modules/trim-right/index.js
generated
vendored
Normal file
10
src/node_modules/babel-core/node_modules/trim-right/index.js
generated
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
'use strict';
|
||||||
|
module.exports = function (str) {
|
||||||
|
var tail = str.length;
|
||||||
|
|
||||||
|
while (/[\s\uFEFF\u00A0]/.test(str[tail - 1])) {
|
||||||
|
tail--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return str.slice(0, tail);
|
||||||
|
};
|
21
src/node_modules/babel-core/node_modules/trim-right/license
generated
vendored
Normal file
21
src/node_modules/babel-core/node_modules/trim-right/license
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.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.
|
93
src/node_modules/babel-core/node_modules/trim-right/package.json
generated
vendored
Normal file
93
src/node_modules/babel-core/node_modules/trim-right/package.json
generated
vendored
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"trim-right@^1.0.0",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/babel-core"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "trim-right@>=1.0.0 <2.0.0",
|
||||||
|
"_id": "trim-right@1.0.1",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/babel-core/trim-right",
|
||||||
|
"_nodeVersion": "0.12.5",
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "sindresorhus@gmail.com",
|
||||||
|
"name": "sindresorhus"
|
||||||
|
},
|
||||||
|
"_npmVersion": "2.11.2",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "trim-right",
|
||||||
|
"raw": "trim-right@^1.0.0",
|
||||||
|
"rawSpec": "^1.0.0",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=1.0.0 <2.0.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/babel-core"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
|
||||||
|
"_shasum": "cb2e1203067e0c8de1f614094b9fe45704ea6003",
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "trim-right@^1.0.0",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/babel-core",
|
||||||
|
"author": {
|
||||||
|
"email": "sindresorhus@gmail.com",
|
||||||
|
"name": "Sindre Sorhus",
|
||||||
|
"url": "sindresorhus.com"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/sindresorhus/trim-right/issues"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"description": "Similar to String#trim() but removes only whitespace on the right",
|
||||||
|
"devDependencies": {
|
||||||
|
"ava": "0.0.4"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "cb2e1203067e0c8de1f614094b9fe45704ea6003",
|
||||||
|
"tarball": "http://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"gitHead": "105fb46669afb0deb49d14bd688b276297e59dff",
|
||||||
|
"homepage": "https://github.com/sindresorhus/trim-right",
|
||||||
|
"keywords": [
|
||||||
|
"trim",
|
||||||
|
"right",
|
||||||
|
"string",
|
||||||
|
"str",
|
||||||
|
"util",
|
||||||
|
"utils",
|
||||||
|
"utility",
|
||||||
|
"whitespace",
|
||||||
|
"space",
|
||||||
|
"remove",
|
||||||
|
"delete"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "sindresorhus@gmail.com",
|
||||||
|
"name": "sindresorhus"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "trim-right",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/sindresorhus/trim-right.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "node test.js"
|
||||||
|
},
|
||||||
|
"version": "1.0.1"
|
||||||
|
}
|
30
src/node_modules/babel-core/node_modules/trim-right/readme.md
generated
vendored
Normal file
30
src/node_modules/babel-core/node_modules/trim-right/readme.md
generated
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# trim-right [![Build Status](https://travis-ci.org/sindresorhus/trim-right.svg?branch=master)](https://travis-ci.org/sindresorhus/trim-right)
|
||||||
|
|
||||||
|
> Similar to [`String#trim()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim) but removes only whitespace on the right
|
||||||
|
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```
|
||||||
|
$ npm install --save trim-right
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```js
|
||||||
|
var trimRight = require('trim-right');
|
||||||
|
|
||||||
|
trimRight(' unicorn ');
|
||||||
|
//=> ' unicorn'
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Related
|
||||||
|
|
||||||
|
- [`trim-left`](https://github.com/sindresorhus/trim-left) - Similar to `String#trim()` but removes only whitespace on the left
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
1
src/node_modules/babel-plugin-undeclared-variables-check/node_modules/.bin/leven
generated
vendored
Symbolic link
1
src/node_modules/babel-plugin-undeclared-variables-check/node_modules/.bin/leven
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../leven/cli.js
|
28
src/node_modules/babel-plugin-undeclared-variables-check/node_modules/leven/cli.js
generated
vendored
Executable file
28
src/node_modules/babel-plugin-undeclared-variables-check/node_modules/leven/cli.js
generated
vendored
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
'use strict';
|
||||||
|
var pkg = require('./package.json');
|
||||||
|
var leven = require('./');
|
||||||
|
var argv = process.argv.slice(2);
|
||||||
|
|
||||||
|
function help() {
|
||||||
|
console.log([
|
||||||
|
'',
|
||||||
|
' ' + pkg.description,
|
||||||
|
'',
|
||||||
|
' Example',
|
||||||
|
' $ leven cat cow',
|
||||||
|
' 2'
|
||||||
|
].join('\n'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv.length !== 2 || argv.indexOf('--help') !== -1) {
|
||||||
|
help();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv.indexOf('--version') !== -1) {
|
||||||
|
console.log(pkg.version);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(leven(argv[0], argv[1]));
|
46
src/node_modules/babel-plugin-undeclared-variables-check/node_modules/leven/index.js
generated
vendored
Normal file
46
src/node_modules/babel-plugin-undeclared-variables-check/node_modules/leven/index.js
generated
vendored
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
'use strict';
|
||||||
|
var arr = [];
|
||||||
|
var charCodeCache = [];
|
||||||
|
|
||||||
|
module.exports = function (a, b) {
|
||||||
|
if (a === b) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
var aLen = a.length;
|
||||||
|
var bLen = b.length;
|
||||||
|
|
||||||
|
if (aLen === 0) {
|
||||||
|
return bLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bLen === 0) {
|
||||||
|
return aLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
var bCharCode;
|
||||||
|
var ret;
|
||||||
|
var tmp;
|
||||||
|
var tmp2;
|
||||||
|
var i = 0;
|
||||||
|
var j = 0;
|
||||||
|
|
||||||
|
while (i < aLen) {
|
||||||
|
charCodeCache[i] = a.charCodeAt(i);
|
||||||
|
arr[i] = ++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (j < bLen) {
|
||||||
|
bCharCode = b.charCodeAt(j);
|
||||||
|
tmp = j++;
|
||||||
|
ret = j;
|
||||||
|
|
||||||
|
for (i = 0; i < aLen; i++) {
|
||||||
|
tmp2 = bCharCode === charCodeCache[i] ? tmp : tmp + 1;
|
||||||
|
tmp = arr[i];
|
||||||
|
ret = arr[i] = tmp > ret ? tmp2 > ret ? ret + 1 : tmp2 : tmp2 > tmp ? tmp + 1 : tmp2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
};
|
21
src/node_modules/babel-plugin-undeclared-variables-check/node_modules/leven/license
generated
vendored
Normal file
21
src/node_modules/babel-plugin-undeclared-variables-check/node_modules/leven/license
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.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.
|
115
src/node_modules/babel-plugin-undeclared-variables-check/node_modules/leven/package.json
generated
vendored
Normal file
115
src/node_modules/babel-plugin-undeclared-variables-check/node_modules/leven/package.json
generated
vendored
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"leven@^1.0.2",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/babel-plugin-undeclared-variables-check"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "leven@>=1.0.2 <2.0.0",
|
||||||
|
"_id": "leven@1.0.2",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/babel-plugin-undeclared-variables-check/leven",
|
||||||
|
"_nodeVersion": "0.12.3",
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "sindresorhus@gmail.com",
|
||||||
|
"name": "sindresorhus"
|
||||||
|
},
|
||||||
|
"_npmVersion": "2.9.1",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "leven",
|
||||||
|
"raw": "leven@^1.0.2",
|
||||||
|
"rawSpec": "^1.0.2",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=1.0.2 <2.0.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/babel-plugin-undeclared-variables-check"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz",
|
||||||
|
"_shasum": "9144b6eebca5f1d0680169f1a6770dcea60b75c3",
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "leven@^1.0.2",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/babel-plugin-undeclared-variables-check",
|
||||||
|
"author": {
|
||||||
|
"email": "sindresorhus@gmail.com",
|
||||||
|
"name": "Sindre Sorhus",
|
||||||
|
"url": "sindresorhus.com"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"leven": "cli.js"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/sindresorhus/leven/issues"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"description": "Measure the difference between two strings using the fastest JS implementation of the Levenshtein distance algorithm",
|
||||||
|
"devDependencies": {
|
||||||
|
"ava": "0.0.4",
|
||||||
|
"fast-levenshtein": "^1.0.3",
|
||||||
|
"ld": "^0.1.0",
|
||||||
|
"levdist": "^1.0.0",
|
||||||
|
"levenshtein": "^1.0.4",
|
||||||
|
"levenshtein-component": "0.0.1",
|
||||||
|
"levenshtein-edit-distance": "^0.1.0",
|
||||||
|
"matcha": "^0.6.0",
|
||||||
|
"natural": "^0.2.1"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "9144b6eebca5f1d0680169f1a6770dcea60b75c3",
|
||||||
|
"tarball": "http://registry.npmjs.org/leven/-/leven-1.0.2.tgz"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"index.js",
|
||||||
|
"cli.js"
|
||||||
|
],
|
||||||
|
"gitHead": "c5035efd44401a8a43dfd0bead24c51386499e4b",
|
||||||
|
"homepage": "https://github.com/sindresorhus/leven",
|
||||||
|
"keywords": [
|
||||||
|
"cli",
|
||||||
|
"bin",
|
||||||
|
"leven",
|
||||||
|
"levenshtein",
|
||||||
|
"distance",
|
||||||
|
"algorithm",
|
||||||
|
"algo",
|
||||||
|
"string",
|
||||||
|
"difference",
|
||||||
|
"diff",
|
||||||
|
"fast",
|
||||||
|
"fuzzy",
|
||||||
|
"similar",
|
||||||
|
"similarity",
|
||||||
|
"compare",
|
||||||
|
"comparison",
|
||||||
|
"edit",
|
||||||
|
"text",
|
||||||
|
"match",
|
||||||
|
"matching"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "sindresorhus@gmail.com",
|
||||||
|
"name": "sindresorhus"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "leven",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/sindresorhus/leven.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"bench": "matcha bench.js",
|
||||||
|
"test": "node test.js"
|
||||||
|
},
|
||||||
|
"version": "1.0.2"
|
||||||
|
}
|
58
src/node_modules/babel-plugin-undeclared-variables-check/node_modules/leven/readme.md
generated
vendored
Normal file
58
src/node_modules/babel-plugin-undeclared-variables-check/node_modules/leven/readme.md
generated
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# leven [![Build Status](https://travis-ci.org/sindresorhus/leven.svg?branch=master)](https://travis-ci.org/sindresorhus/leven)
|
||||||
|
|
||||||
|
> Measure the difference between two strings
|
||||||
|
> The fastest JS implementation of the [Levenshtein distance](http://en.wikipedia.org/wiki/Levenshtein_distance) algorithm
|
||||||
|
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```
|
||||||
|
$ npm install --save leven
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```js
|
||||||
|
var leven = require('leven');
|
||||||
|
|
||||||
|
leven('cat', 'cow');
|
||||||
|
//=> 2
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Benchmark
|
||||||
|
|
||||||
|
```
|
||||||
|
$ npm run bench
|
||||||
|
```
|
||||||
|
```
|
||||||
|
343,757 op/s » leven
|
||||||
|
264,625 op/s » levenshtein-edit-distance
|
||||||
|
49,981 op/s » fast-levenshtein
|
||||||
|
25,496 op/s » levenshtein-component
|
||||||
|
18,240 op/s » levdist
|
||||||
|
17,554 op/s » ld
|
||||||
|
12,633 op/s » natural
|
||||||
|
9,960 op/s » levenshtein
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## CLI
|
||||||
|
|
||||||
|
```
|
||||||
|
$ npm install --global leven
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
$ leven --help
|
||||||
|
|
||||||
|
Example
|
||||||
|
$ leven cat cow
|
||||||
|
2
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
24
src/node_modules/browserify/node_modules/concat-stream/LICENSE
generated
vendored
Normal file
24
src/node_modules/browserify/node_modules/concat-stream/LICENSE
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2013 Max Ogden
|
||||||
|
|
||||||
|
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.
|
136
src/node_modules/browserify/node_modules/concat-stream/index.js
generated
vendored
Normal file
136
src/node_modules/browserify/node_modules/concat-stream/index.js
generated
vendored
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
var Writable = require('readable-stream').Writable
|
||||||
|
var inherits = require('inherits')
|
||||||
|
|
||||||
|
if (typeof Uint8Array === 'undefined') {
|
||||||
|
var U8 = require('typedarray').Uint8Array
|
||||||
|
} else {
|
||||||
|
var U8 = Uint8Array
|
||||||
|
}
|
||||||
|
|
||||||
|
function ConcatStream(opts, cb) {
|
||||||
|
if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb)
|
||||||
|
|
||||||
|
if (typeof opts === 'function') {
|
||||||
|
cb = opts
|
||||||
|
opts = {}
|
||||||
|
}
|
||||||
|
if (!opts) opts = {}
|
||||||
|
|
||||||
|
var encoding = opts.encoding
|
||||||
|
var shouldInferEncoding = false
|
||||||
|
|
||||||
|
if (!encoding) {
|
||||||
|
shouldInferEncoding = true
|
||||||
|
} else {
|
||||||
|
encoding = String(encoding).toLowerCase()
|
||||||
|
if (encoding === 'u8' || encoding === 'uint8') {
|
||||||
|
encoding = 'uint8array'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Writable.call(this, { objectMode: true })
|
||||||
|
|
||||||
|
this.encoding = encoding
|
||||||
|
this.shouldInferEncoding = shouldInferEncoding
|
||||||
|
|
||||||
|
if (cb) this.on('finish', function () { cb(this.getBody()) })
|
||||||
|
this.body = []
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = ConcatStream
|
||||||
|
inherits(ConcatStream, Writable)
|
||||||
|
|
||||||
|
ConcatStream.prototype._write = function(chunk, enc, next) {
|
||||||
|
this.body.push(chunk)
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
ConcatStream.prototype.inferEncoding = function (buff) {
|
||||||
|
var firstBuffer = buff === undefined ? this.body[0] : buff;
|
||||||
|
if (Buffer.isBuffer(firstBuffer)) return 'buffer'
|
||||||
|
if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array'
|
||||||
|
if (Array.isArray(firstBuffer)) return 'array'
|
||||||
|
if (typeof firstBuffer === 'string') return 'string'
|
||||||
|
if (Object.prototype.toString.call(firstBuffer) === "[object Object]") return 'object'
|
||||||
|
return 'buffer'
|
||||||
|
}
|
||||||
|
|
||||||
|
ConcatStream.prototype.getBody = function () {
|
||||||
|
if (!this.encoding && this.body.length === 0) return []
|
||||||
|
if (this.shouldInferEncoding) this.encoding = this.inferEncoding()
|
||||||
|
if (this.encoding === 'array') return arrayConcat(this.body)
|
||||||
|
if (this.encoding === 'string') return stringConcat(this.body)
|
||||||
|
if (this.encoding === 'buffer') return bufferConcat(this.body)
|
||||||
|
if (this.encoding === 'uint8array') return u8Concat(this.body)
|
||||||
|
return this.body
|
||||||
|
}
|
||||||
|
|
||||||
|
var isArray = Array.isArray || function (arr) {
|
||||||
|
return Object.prototype.toString.call(arr) == '[object Array]'
|
||||||
|
}
|
||||||
|
|
||||||
|
function isArrayish (arr) {
|
||||||
|
return /Array\]$/.test(Object.prototype.toString.call(arr))
|
||||||
|
}
|
||||||
|
|
||||||
|
function stringConcat (parts) {
|
||||||
|
var strings = []
|
||||||
|
var needsToString = false
|
||||||
|
for (var i = 0; i < parts.length; i++) {
|
||||||
|
var p = parts[i]
|
||||||
|
if (typeof p === 'string') {
|
||||||
|
strings.push(p)
|
||||||
|
} else if (Buffer.isBuffer(p)) {
|
||||||
|
strings.push(p)
|
||||||
|
} else {
|
||||||
|
strings.push(Buffer(p))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Buffer.isBuffer(parts[0])) {
|
||||||
|
strings = Buffer.concat(strings)
|
||||||
|
strings = strings.toString('utf8')
|
||||||
|
} else {
|
||||||
|
strings = strings.join('')
|
||||||
|
}
|
||||||
|
return strings
|
||||||
|
}
|
||||||
|
|
||||||
|
function bufferConcat (parts) {
|
||||||
|
var bufs = []
|
||||||
|
for (var i = 0; i < parts.length; i++) {
|
||||||
|
var p = parts[i]
|
||||||
|
if (Buffer.isBuffer(p)) {
|
||||||
|
bufs.push(p)
|
||||||
|
} else if (typeof p === 'string' || isArrayish(p)
|
||||||
|
|| (p && typeof p.subarray === 'function')) {
|
||||||
|
bufs.push(Buffer(p))
|
||||||
|
} else bufs.push(Buffer(String(p)))
|
||||||
|
}
|
||||||
|
return Buffer.concat(bufs)
|
||||||
|
}
|
||||||
|
|
||||||
|
function arrayConcat (parts) {
|
||||||
|
var res = []
|
||||||
|
for (var i = 0; i < parts.length; i++) {
|
||||||
|
res.push.apply(res, parts[i])
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
function u8Concat (parts) {
|
||||||
|
var len = 0
|
||||||
|
for (var i = 0; i < parts.length; i++) {
|
||||||
|
if (typeof parts[i] === 'string') {
|
||||||
|
parts[i] = Buffer(parts[i])
|
||||||
|
}
|
||||||
|
len += parts[i].length
|
||||||
|
}
|
||||||
|
var u8 = new U8(len)
|
||||||
|
for (var i = 0, offset = 0; i < parts.length; i++) {
|
||||||
|
var part = parts[i]
|
||||||
|
for (var j = 0; j < part.length; j++) {
|
||||||
|
u8[offset++] = part[j]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return u8
|
||||||
|
}
|
106
src/node_modules/browserify/node_modules/concat-stream/package.json
generated
vendored
Normal file
106
src/node_modules/browserify/node_modules/concat-stream/package.json
generated
vendored
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"concat-stream@~1.4.1",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/browserify"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "concat-stream@>=1.4.1 <1.5.0",
|
||||||
|
"_id": "concat-stream@1.4.10",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/browserify/concat-stream",
|
||||||
|
"_nodeVersion": "1.8.2",
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "max@maxogden.com",
|
||||||
|
"name": "maxogden"
|
||||||
|
},
|
||||||
|
"_npmVersion": "2.9.0",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "concat-stream",
|
||||||
|
"raw": "concat-stream@~1.4.1",
|
||||||
|
"rawSpec": "~1.4.1",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=1.4.1 <1.5.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/browserify"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz",
|
||||||
|
"_shasum": "acc3bbf5602cb8cc980c6ac840fa7d8603e3ef36",
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "concat-stream@~1.4.1",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/browserify",
|
||||||
|
"author": {
|
||||||
|
"email": "max@maxogden.com",
|
||||||
|
"name": "Max Ogden"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "http://github.com/maxogden/concat-stream/issues"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"inherits": "~2.0.1",
|
||||||
|
"readable-stream": "~1.1.9",
|
||||||
|
"typedarray": "~0.0.5"
|
||||||
|
},
|
||||||
|
"description": "writable stream that concatenates strings or binary data and calls a callback with the result",
|
||||||
|
"devDependencies": {
|
||||||
|
"tape": "~2.3.2"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "acc3bbf5602cb8cc980c6ac840fa7d8603e3ef36",
|
||||||
|
"tarball": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz"
|
||||||
|
},
|
||||||
|
"engines": [
|
||||||
|
"node >= 0.8"
|
||||||
|
],
|
||||||
|
"files": [
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"gitHead": "71d37be263a0457b8afcbb27237e71ddca634373",
|
||||||
|
"homepage": "https://github.com/maxogden/concat-stream#readme",
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "index.js",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "max@maxogden.com",
|
||||||
|
"name": "maxogden"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "concat-stream",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+ssh://git@github.com/maxogden/concat-stream.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "tape test/*.js test/server/*.js"
|
||||||
|
},
|
||||||
|
"tags": [
|
||||||
|
"stream",
|
||||||
|
"simple",
|
||||||
|
"util",
|
||||||
|
"utility"
|
||||||
|
],
|
||||||
|
"testling": {
|
||||||
|
"browsers": [
|
||||||
|
"ie/8..latest",
|
||||||
|
"firefox/17..latest",
|
||||||
|
"firefox/nightly",
|
||||||
|
"chrome/22..latest",
|
||||||
|
"chrome/canary",
|
||||||
|
"opera/12..latest",
|
||||||
|
"opera/next",
|
||||||
|
"safari/5.1..latest",
|
||||||
|
"ipad/6.0..latest",
|
||||||
|
"iphone/6.0..latest",
|
||||||
|
"android-browser/4.2..latest"
|
||||||
|
],
|
||||||
|
"files": "test/*.js"
|
||||||
|
},
|
||||||
|
"version": "1.4.10"
|
||||||
|
}
|
94
src/node_modules/browserify/node_modules/concat-stream/readme.md
generated
vendored
Normal file
94
src/node_modules/browserify/node_modules/concat-stream/readme.md
generated
vendored
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# concat-stream
|
||||||
|
|
||||||
|
Writable stream that concatenates strings or binary data and calls a callback with the result. Not a transform stream -- more of a stream sink.
|
||||||
|
|
||||||
|
[![Build Status](https://travis-ci.org/maxogden/concat-stream.svg?branch=master)](https://travis-ci.org/maxogden/concat-stream)
|
||||||
|
|
||||||
|
[![NPM](https://nodei.co/npm/concat-stream.png)](https://nodei.co/npm/concat-stream/)
|
||||||
|
|
||||||
|
### description
|
||||||
|
|
||||||
|
Streams emit many buffers. If you want to collect all of the buffers, and when the stream ends concatenate all of the buffers together and receive a single buffer then this is the module for you.
|
||||||
|
|
||||||
|
Only use this if you know you can fit all of the output of your stream into a single Buffer (e.g. in RAM).
|
||||||
|
|
||||||
|
There are also `objectMode` streams that emit things other than Buffers, and you can concatenate these too. See below for details.
|
||||||
|
|
||||||
|
### examples
|
||||||
|
|
||||||
|
#### Buffers
|
||||||
|
|
||||||
|
```js
|
||||||
|
var fs = require('fs')
|
||||||
|
var concat = require('concat-stream')
|
||||||
|
|
||||||
|
var readStream = fs.createReadStream('cat.png')
|
||||||
|
var concatStream = concat(gotPicture)
|
||||||
|
|
||||||
|
readStream.on('error', handleError)
|
||||||
|
readStream.pipe(concatStream)
|
||||||
|
|
||||||
|
function gotPicture(imageBuffer) {
|
||||||
|
// imageBuffer is all of `cat.png` as a node.js Buffer
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleError(err) {
|
||||||
|
// handle your error appropriately here, e.g.:
|
||||||
|
console.error(err) // print the error to STDERR
|
||||||
|
process.exit(1) // exit program with non-zero exit code
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Arrays
|
||||||
|
|
||||||
|
```js
|
||||||
|
var write = concat(function(data) {})
|
||||||
|
write.write([1,2,3])
|
||||||
|
write.write([4,5,6])
|
||||||
|
write.end()
|
||||||
|
// data will be [1,2,3,4,5,6] in the above callback
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Uint8Arrays
|
||||||
|
|
||||||
|
```js
|
||||||
|
var write = concat(function(data) {})
|
||||||
|
var a = new Uint8Array(3)
|
||||||
|
a[0] = 97; a[1] = 98; a[2] = 99
|
||||||
|
write.write(a)
|
||||||
|
write.write('!')
|
||||||
|
write.end(Buffer('!!1'))
|
||||||
|
```
|
||||||
|
|
||||||
|
See `test/` for more examples
|
||||||
|
|
||||||
|
# methods
|
||||||
|
|
||||||
|
```js
|
||||||
|
var concat = require('concat-stream')
|
||||||
|
```
|
||||||
|
|
||||||
|
## var writable = concat(opts={}, cb)
|
||||||
|
|
||||||
|
Return a `writable` stream that will fire `cb(data)` with all of the data that
|
||||||
|
was written to the stream. Data can be written to `writable` as strings,
|
||||||
|
Buffers, arrays of byte integers, and Uint8Arrays.
|
||||||
|
|
||||||
|
By default `concat-stream` will give you back the same data type as the type of the first buffer written to the stream. Use `opts.encoding` to set what format `data` should be returned as, e.g. if you if you don't want to rely on the built-in type checking or for some other reason.
|
||||||
|
|
||||||
|
* `string` - get a string
|
||||||
|
* `buffer` - get back a Buffer
|
||||||
|
* `array` - get an array of byte integers
|
||||||
|
* `uint8array`, `u8`, `uint8` - get back a Uint8Array
|
||||||
|
* `object`, get back an array of Objects
|
||||||
|
|
||||||
|
If you don't specify an encoding, and the types can't be inferred (e.g. you write things that aren't in the list above), it will try to convert concat them into a `Buffer`.
|
||||||
|
|
||||||
|
# error handling
|
||||||
|
|
||||||
|
`concat-stream` does not handle errors for you, so you must handle errors on whatever streams you pipe into `concat-stream`. This is a general rule when programming with node.js streams: always handle errors on each and every stream. Since `concat-stream` is not itself a stream it does not emit errors.
|
||||||
|
|
||||||
|
# license
|
||||||
|
|
||||||
|
MIT LICENSE
|
18
src/node_modules/browserify/node_modules/tty-browserify/LICENSE
generated
vendored
Normal file
18
src/node_modules/browserify/node_modules/tty-browserify/LICENSE
generated
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
This software is released under the MIT license:
|
||||||
|
|
||||||
|
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.
|
11
src/node_modules/browserify/node_modules/tty-browserify/index.js
generated
vendored
Normal file
11
src/node_modules/browserify/node_modules/tty-browserify/index.js
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
exports.isatty = function () { return false; };
|
||||||
|
|
||||||
|
function ReadStream() {
|
||||||
|
throw new Error('tty.ReadStream is not implemented');
|
||||||
|
}
|
||||||
|
exports.ReadStream = ReadStream;
|
||||||
|
|
||||||
|
function WriteStream() {
|
||||||
|
throw new Error('tty.ReadStream is not implemented');
|
||||||
|
}
|
||||||
|
exports.WriteStream = WriteStream;
|
78
src/node_modules/browserify/node_modules/tty-browserify/package.json
generated
vendored
Normal file
78
src/node_modules/browserify/node_modules/tty-browserify/package.json
generated
vendored
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"tty-browserify@~0.0.0",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/browserify"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "tty-browserify@>=0.0.0 <0.1.0",
|
||||||
|
"_id": "tty-browserify@0.0.0",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/browserify/tty-browserify",
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "mail@substack.net",
|
||||||
|
"name": "substack"
|
||||||
|
},
|
||||||
|
"_npmVersion": "1.3.14",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "tty-browserify",
|
||||||
|
"raw": "tty-browserify@~0.0.0",
|
||||||
|
"rawSpec": "~0.0.0",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=0.0.0 <0.1.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/browserify"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
|
||||||
|
"_shasum": "a157ba402da24e9bf957f9aa69d524eed42901a6",
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "tty-browserify@~0.0.0",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/browserify",
|
||||||
|
"author": {
|
||||||
|
"email": "mail@substack.net",
|
||||||
|
"name": "James Halliday",
|
||||||
|
"url": "http://substack.net"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/substack/tty-browserify/issues"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"description": "the tty module from node core for browsers",
|
||||||
|
"devDependencies": {
|
||||||
|
"tape": "~1.0.4"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "a157ba402da24e9bf957f9aa69d524eed42901a6",
|
||||||
|
"tarball": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/substack/tty-browserify",
|
||||||
|
"keywords": [
|
||||||
|
"tty",
|
||||||
|
"browser",
|
||||||
|
"browserify"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "index.js",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "mail@substack.net",
|
||||||
|
"name": "substack"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "tty-browserify",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/substack/tty-browserify.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "tape test/*.js"
|
||||||
|
},
|
||||||
|
"version": "0.0.0"
|
||||||
|
}
|
1
src/node_modules/browserify/node_modules/tty-browserify/readme.markdown
generated
vendored
Normal file
1
src/node_modules/browserify/node_modules/tty-browserify/readme.markdown
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
# tty-browserify
|
19
src/node_modules/defs/node_modules/tryor/LICENSE
generated
vendored
Normal file
19
src/node_modules/defs/node_modules/tryor/LICENSE
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2013 Olov Lassus <olov.lassus@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.
|
46
src/node_modules/defs/node_modules/tryor/README.md
generated
vendored
Normal file
46
src/node_modules/defs/node_modules/tryor/README.md
generated
vendored
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# tryor.js
|
||||||
|
Give it a function and a default value. `tryor` will give you back the return value of
|
||||||
|
the function or, in case the function threw an exception, the default value.
|
||||||
|
Works in node and browsers.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
```javascript
|
||||||
|
// do this
|
||||||
|
var config = tryor(function() {
|
||||||
|
return JSON.parse(userProvidedConfigString);
|
||||||
|
}, {});
|
||||||
|
|
||||||
|
// instead of
|
||||||
|
var config; // or var config = {}; and empty catch
|
||||||
|
try {
|
||||||
|
config = JSON.parse(userProvidedConfigString);
|
||||||
|
} catch (e) {
|
||||||
|
config = {};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Works extra well with ES6-style `const` variables.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Node
|
||||||
|
Install using npm
|
||||||
|
|
||||||
|
npm install tryor
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var tryor = require("tryor");
|
||||||
|
```
|
||||||
|
|
||||||
|
### Browser
|
||||||
|
Clone the repo and include it in a script tag
|
||||||
|
|
||||||
|
git clone https://github.com/olov/tryor.git
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script src="tryor/tryor.js"></script>
|
||||||
|
```
|
74
src/node_modules/defs/node_modules/tryor/package.json
generated
vendored
Normal file
74
src/node_modules/defs/node_modules/tryor/package.json
generated
vendored
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"tryor@~0.1.2",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/defs"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "tryor@>=0.1.2 <0.2.0",
|
||||||
|
"_id": "tryor@0.1.2",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/defs/tryor",
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "olov.lassus@gmail.com",
|
||||||
|
"name": "olov"
|
||||||
|
},
|
||||||
|
"_npmVersion": "1.2.18",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "tryor",
|
||||||
|
"raw": "tryor@~0.1.2",
|
||||||
|
"rawSpec": "~0.1.2",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=0.1.2 <0.2.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/defs"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz",
|
||||||
|
"_shasum": "8145e4ca7caff40acde3ccf946e8b8bb75b4172b",
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "tryor@~0.1.2",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/defs",
|
||||||
|
"author": {
|
||||||
|
"email": "olov.lassus@gmail.com",
|
||||||
|
"name": "Olov Lassus"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/olov/tryor/issues"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"description": "return fn() or default value (in case of exception)",
|
||||||
|
"devDependencies": {},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "8145e4ca7caff40acde3ccf946e8b8bb75b4172b",
|
||||||
|
"tarball": "http://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/olov/tryor#readme",
|
||||||
|
"keywords": [
|
||||||
|
"try",
|
||||||
|
"catch",
|
||||||
|
"default"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "tryor.js",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "olov.lassus@gmail.com",
|
||||||
|
"name": "olov"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "tryor",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "# tryor.js\nGive it a function and a default value. `tryor` will give you back the return value of\nthe function or, in case the function threw an exception, the default value.\nWorks in node and browsers.\n\n\n\n## Usage\n```javascript\n // do this\n var config = tryor(function() {\n return JSON.parse(userProvidedConfigString);\n }, {});\n\n // instead of\n var config; // or var config = {}; and empty catch\n try {\n config = JSON.parse(userProvidedConfigString);\n } catch (e) {\n config = {};\n }\n```\n\nWorks extra well with ES6-style `const` variables.\n\n\n\n## Installation\n\n### Node\nInstall using npm\n\n npm install tryor\n\n```javascript\nvar tryor = require(\"tryor\");\n```\n\n### Browser\nClone the repo and include it in a script tag\n\n git clone https://github.com/olov/tryor.git\n\n```html\n<script src=\"tryor/tryor.js\"></script>\n```\n",
|
||||||
|
"readmeFilename": "README.md",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/olov/tryor.git"
|
||||||
|
},
|
||||||
|
"scripts": {},
|
||||||
|
"version": "0.1.2"
|
||||||
|
}
|
17
src/node_modules/defs/node_modules/tryor/tryor.js
generated
vendored
Normal file
17
src/node_modules/defs/node_modules/tryor/tryor.js
generated
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// tryor.js
|
||||||
|
// MIT licensed, see LICENSE file
|
||||||
|
// Copyright (c) 2013 Olov Lassus <olov.lassus@gmail.com>
|
||||||
|
|
||||||
|
function tryor(fn, v) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
try {
|
||||||
|
return fn();
|
||||||
|
} catch (e) {
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (typeof module !== "undefined" && typeof module.exports !== "undefined") {
|
||||||
|
module.exports = tryor;
|
||||||
|
}
|
1
src/node_modules/diffie-hellman/node_modules/.bin/miller-rabin
generated
vendored
Symbolic link
1
src/node_modules/diffie-hellman/node_modules/.bin/miller-rabin
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../miller-rabin/bin/miller-rabin
|
2
src/node_modules/diffie-hellman/node_modules/miller-rabin/.npmignore
generated
vendored
Normal file
2
src/node_modules/diffie-hellman/node_modules/miller-rabin/.npmignore
generated
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
node_modules/
|
||||||
|
npm-debug.log
|
26
src/node_modules/diffie-hellman/node_modules/miller-rabin/README.md
generated
vendored
Normal file
26
src/node_modules/diffie-hellman/node_modules/miller-rabin/README.md
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Miller-Rabin
|
||||||
|
|
||||||
|
#### LICENSE
|
||||||
|
|
||||||
|
This software is licensed under the MIT License.
|
||||||
|
|
||||||
|
Copyright Fedor Indutny, 2014.
|
||||||
|
|
||||||
|
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
src/node_modules/diffie-hellman/node_modules/miller-rabin/bin/miller-rabin
generated
vendored
Executable file
29
src/node_modules/diffie-hellman/node_modules/miller-rabin/bin/miller-rabin
generated
vendored
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
var bn = require('bn.js');
|
||||||
|
var fs = require('fs');
|
||||||
|
var mr = require('../').create();
|
||||||
|
|
||||||
|
var num = '';
|
||||||
|
if (process.argv[2]) {
|
||||||
|
num += fs.readFileSync(process.argv[2]);
|
||||||
|
start(num);
|
||||||
|
} else {
|
||||||
|
process.stdin.on('data', function(chunk) {
|
||||||
|
num += chunk.toString().replace(/[^0-9a-f]/gi, '');
|
||||||
|
});
|
||||||
|
process.stdin.once('end', function() {
|
||||||
|
start(num);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function start(text) {
|
||||||
|
var num = new bn(text, 16);
|
||||||
|
|
||||||
|
var divisor = mr.getDivisor(num);
|
||||||
|
if (!divisor)
|
||||||
|
process.exit(1);
|
||||||
|
if (divisor.cmpn(1) === 0)
|
||||||
|
process.exit(0);
|
||||||
|
|
||||||
|
console.log(divisor.toString(16));
|
||||||
|
}
|
113
src/node_modules/diffie-hellman/node_modules/miller-rabin/lib/mr.js
generated
vendored
Normal file
113
src/node_modules/diffie-hellman/node_modules/miller-rabin/lib/mr.js
generated
vendored
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
var bn = require('bn.js');
|
||||||
|
var brorand = require('brorand');
|
||||||
|
|
||||||
|
function MillerRabin(rand) {
|
||||||
|
this.rand = rand || new brorand.Rand();
|
||||||
|
}
|
||||||
|
module.exports = MillerRabin;
|
||||||
|
|
||||||
|
MillerRabin.create = function create(rand) {
|
||||||
|
return new MillerRabin(rand);
|
||||||
|
};
|
||||||
|
|
||||||
|
MillerRabin.prototype._rand = function _rand(n) {
|
||||||
|
var len = n.bitLength();
|
||||||
|
var buf = this.rand.generate(Math.ceil(len / 8));
|
||||||
|
|
||||||
|
// Set low bits
|
||||||
|
buf[0] |= 3;
|
||||||
|
|
||||||
|
// Mask high bits
|
||||||
|
var mask = len & 0x7;
|
||||||
|
if (mask !== 0)
|
||||||
|
buf[buf.length - 1] >>= 7 - mask;
|
||||||
|
|
||||||
|
return new bn(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
MillerRabin.prototype.test = function test(n, k, cb) {
|
||||||
|
var len = n.bitLength();
|
||||||
|
var red = bn.mont(n);
|
||||||
|
var rone = new bn(1).toRed(red);
|
||||||
|
|
||||||
|
if (!k)
|
||||||
|
k = Math.max(1, (len / 48) | 0);
|
||||||
|
|
||||||
|
// Find d and s, (n - 1) = (2 ^ s) * d;
|
||||||
|
var n1 = n.subn(1);
|
||||||
|
var n2 = n1.subn(1);
|
||||||
|
for (var s = 0; !n1.testn(s); s++) {}
|
||||||
|
var d = n.shrn(s);
|
||||||
|
|
||||||
|
var rn1 = n1.toRed(red);
|
||||||
|
|
||||||
|
var prime = true;
|
||||||
|
for (; k > 0; k--) {
|
||||||
|
var a = this._rand(n2);
|
||||||
|
if (cb)
|
||||||
|
cb(a);
|
||||||
|
|
||||||
|
var x = a.toRed(red).redPow(d);
|
||||||
|
if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (var i = 1; i < s; i++) {
|
||||||
|
x = x.redSqr();
|
||||||
|
|
||||||
|
if (x.cmp(rone) === 0)
|
||||||
|
return false;
|
||||||
|
if (x.cmp(rn1) === 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i === s)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return prime;
|
||||||
|
};
|
||||||
|
|
||||||
|
MillerRabin.prototype.getDivisor = function getDivisor(n, k) {
|
||||||
|
var len = n.bitLength();
|
||||||
|
var red = bn.mont(n);
|
||||||
|
var rone = new bn(1).toRed(red);
|
||||||
|
|
||||||
|
if (!k)
|
||||||
|
k = Math.max(1, (len / 48) | 0);
|
||||||
|
|
||||||
|
// Find d and s, (n - 1) = (2 ^ s) * d;
|
||||||
|
var n1 = n.subn(1);
|
||||||
|
var n2 = n1.subn(1);
|
||||||
|
for (var s = 0; !n1.testn(s); s++) {}
|
||||||
|
var d = n.shrn(s);
|
||||||
|
|
||||||
|
var rn1 = n1.toRed(red);
|
||||||
|
|
||||||
|
for (; k > 0; k--) {
|
||||||
|
var a = this._rand(n2);
|
||||||
|
|
||||||
|
var g = n.gcd(a);
|
||||||
|
if (g.cmpn(1) !== 0)
|
||||||
|
return g;
|
||||||
|
|
||||||
|
var x = a.toRed(red).redPow(d);
|
||||||
|
if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (var i = 1; i < s; i++) {
|
||||||
|
x = x.redSqr();
|
||||||
|
|
||||||
|
if (x.cmp(rone) === 0)
|
||||||
|
return x.fromRed().subn(1).gcd(n);
|
||||||
|
if (x.cmp(rn1) === 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i === s) {
|
||||||
|
x = x.redSqr();
|
||||||
|
return x.fromRed().subn(1).gcd(n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
89
src/node_modules/diffie-hellman/node_modules/miller-rabin/package.json
generated
vendored
Normal file
89
src/node_modules/diffie-hellman/node_modules/miller-rabin/package.json
generated
vendored
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"miller-rabin@^4.0.0",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/diffie-hellman"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "miller-rabin@>=4.0.0 <5.0.0",
|
||||||
|
"_id": "miller-rabin@4.0.0",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/diffie-hellman/miller-rabin",
|
||||||
|
"_nodeVersion": "4.2.1",
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "fedor@indutny.com",
|
||||||
|
"name": "indutny"
|
||||||
|
},
|
||||||
|
"_npmVersion": "2.14.7",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "miller-rabin",
|
||||||
|
"raw": "miller-rabin@^4.0.0",
|
||||||
|
"rawSpec": "^4.0.0",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=4.0.0 <5.0.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/diffie-hellman"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz",
|
||||||
|
"_shasum": "4a62fb1d42933c05583982f4c716f6fb9e6c6d3d",
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "miller-rabin@^4.0.0",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/diffie-hellman",
|
||||||
|
"author": {
|
||||||
|
"email": "fedor@indutny.com",
|
||||||
|
"name": "Fedor Indutny"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"miller-rabin": "bin/miller-rabin"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/indutny/miller-rabin/issues"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"bn.js": "^4.0.0",
|
||||||
|
"brorand": "^1.0.1"
|
||||||
|
},
|
||||||
|
"description": "Miller Rabin algorithm for primality test",
|
||||||
|
"devDependencies": {
|
||||||
|
"mocha": "^2.0.1"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "4a62fb1d42933c05583982f4c716f6fb9e6c6d3d",
|
||||||
|
"tarball": "http://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz"
|
||||||
|
},
|
||||||
|
"gitHead": "94b56df9948a1ae592b331afc9559115f3f98fb2",
|
||||||
|
"homepage": "https://github.com/indutny/miller-rabin",
|
||||||
|
"keywords": [
|
||||||
|
"prime",
|
||||||
|
"miller-rabin",
|
||||||
|
"bignumber"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "lib/mr.js",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "fedor@indutny.com",
|
||||||
|
"name": "indutny"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"email": "calvin.metcalf@gmail.com",
|
||||||
|
"name": "cwmma"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "miller-rabin",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+ssh://git@github.com/indutny/miller-rabin.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "mocha --reporter=spec test/**/*-test.js"
|
||||||
|
},
|
||||||
|
"version": "4.0.0"
|
||||||
|
}
|
18
src/node_modules/diffie-hellman/node_modules/miller-rabin/test/api-test.js
generated
vendored
Normal file
18
src/node_modules/diffie-hellman/node_modules/miller-rabin/test/api-test.js
generated
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
var assert = require('assert');
|
||||||
|
var mr = require('../').create();
|
||||||
|
var bn = require('bn.js');
|
||||||
|
|
||||||
|
describe('Miller-Rabin', function() {
|
||||||
|
it('should test number for primality', function() {
|
||||||
|
assert(!mr.test(new bn(221)));
|
||||||
|
assert(mr.test(new bn(257)));
|
||||||
|
|
||||||
|
var p = new bn('dba8191813fe8f51eaae1de70213aafede8f323f95f32cff' +
|
||||||
|
'8b64ebada275cfb18a446a0150e5fdaee246244c5f002ce0' +
|
||||||
|
'aca97584be1745f2dd1eea2849c52aac8c4b5fb78a1c4da7' +
|
||||||
|
'052774338d3310a6e020c46168cb1f94014e9312511cc4fb' +
|
||||||
|
'79d695bb732449f0e015745b86bfa371dc6ca7386e9c7309' +
|
||||||
|
'5549c2e4b8002873', 16);
|
||||||
|
assert(mr.test(p));
|
||||||
|
});
|
||||||
|
});
|
1
src/node_modules/fs-extra/node_modules/.bin/rimraf
generated
vendored
Symbolic link
1
src/node_modules/fs-extra/node_modules/.bin/rimraf
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../rimraf/bin.js
|
15
src/node_modules/fs-extra/node_modules/glob/LICENSE
generated
vendored
Normal file
15
src/node_modules/fs-extra/node_modules/glob/LICENSE
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
The ISC License
|
||||||
|
|
||||||
|
Copyright (c) Isaac Z. Schlueter and Contributors
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
|
copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
||||||
|
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
359
src/node_modules/fs-extra/node_modules/glob/README.md
generated
vendored
Normal file
359
src/node_modules/fs-extra/node_modules/glob/README.md
generated
vendored
Normal file
@ -0,0 +1,359 @@
|
|||||||
|
# Glob
|
||||||
|
|
||||||
|
Match files using the patterns the shell uses, like stars and stuff.
|
||||||
|
|
||||||
|
[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Build Status](https://ci.appveyor.com/api/projects/status/kd7f3yftf7unxlsx?svg=true)](https://ci.appveyor.com/project/isaacs/node-glob) [![Coverage Status](https://coveralls.io/repos/isaacs/node-glob/badge.svg?branch=master&service=github)](https://coveralls.io/github/isaacs/node-glob?branch=master)
|
||||||
|
|
||||||
|
This is a glob implementation in JavaScript. It uses the `minimatch`
|
||||||
|
library to do its matching.
|
||||||
|
|
||||||
|
![](oh-my-glob.gif)
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var glob = require("glob")
|
||||||
|
|
||||||
|
// options is optional
|
||||||
|
glob("**/*.js", options, function (er, files) {
|
||||||
|
// files is an array of filenames.
|
||||||
|
// If the `nonull` option is set, and nothing
|
||||||
|
// was found, then files is ["**/*.js"]
|
||||||
|
// er is an error object or null.
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
## Glob Primer
|
||||||
|
|
||||||
|
"Globs" are the patterns you type when you do stuff like `ls *.js` on
|
||||||
|
the command line, or put `build/*` in a `.gitignore` file.
|
||||||
|
|
||||||
|
Before parsing the path part patterns, braced sections are expanded
|
||||||
|
into a set. Braced sections start with `{` and end with `}`, with any
|
||||||
|
number of comma-delimited sections within. Braced sections may contain
|
||||||
|
slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`.
|
||||||
|
|
||||||
|
The following characters have special magic meaning when used in a
|
||||||
|
path portion:
|
||||||
|
|
||||||
|
* `*` Matches 0 or more characters in a single path portion
|
||||||
|
* `?` Matches 1 character
|
||||||
|
* `[...]` Matches a range of characters, similar to a RegExp range.
|
||||||
|
If the first character of the range is `!` or `^` then it matches
|
||||||
|
any character not in the range.
|
||||||
|
* `!(pattern|pattern|pattern)` Matches anything that does not match
|
||||||
|
any of the patterns provided.
|
||||||
|
* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the
|
||||||
|
patterns provided.
|
||||||
|
* `+(pattern|pattern|pattern)` Matches one or more occurrences of the
|
||||||
|
patterns provided.
|
||||||
|
* `*(a|b|c)` Matches zero or more occurrences of the patterns provided
|
||||||
|
* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns
|
||||||
|
provided
|
||||||
|
* `**` If a "globstar" is alone in a path portion, then it matches
|
||||||
|
zero or more directories and subdirectories searching for matches.
|
||||||
|
It does not crawl symlinked directories.
|
||||||
|
|
||||||
|
### Dots
|
||||||
|
|
||||||
|
If a file or directory path portion has a `.` as the first character,
|
||||||
|
then it will not match any glob pattern unless that pattern's
|
||||||
|
corresponding path part also has a `.` as its first character.
|
||||||
|
|
||||||
|
For example, the pattern `a/.*/c` would match the file at `a/.b/c`.
|
||||||
|
However the pattern `a/*/c` would not, because `*` does not start with
|
||||||
|
a dot character.
|
||||||
|
|
||||||
|
You can make glob treat dots as normal characters by setting
|
||||||
|
`dot:true` in the options.
|
||||||
|
|
||||||
|
### Basename Matching
|
||||||
|
|
||||||
|
If you set `matchBase:true` in the options, and the pattern has no
|
||||||
|
slashes in it, then it will seek for any file anywhere in the tree
|
||||||
|
with a matching basename. For example, `*.js` would match
|
||||||
|
`test/simple/basic.js`.
|
||||||
|
|
||||||
|
### Empty Sets
|
||||||
|
|
||||||
|
If no matching files are found, then an empty array is returned. This
|
||||||
|
differs from the shell, where the pattern itself is returned. For
|
||||||
|
example:
|
||||||
|
|
||||||
|
$ echo a*s*d*f
|
||||||
|
a*s*d*f
|
||||||
|
|
||||||
|
To get the bash-style behavior, set the `nonull:true` in the options.
|
||||||
|
|
||||||
|
### See Also:
|
||||||
|
|
||||||
|
* `man sh`
|
||||||
|
* `man bash` (Search for "Pattern Matching")
|
||||||
|
* `man 3 fnmatch`
|
||||||
|
* `man 5 gitignore`
|
||||||
|
* [minimatch documentation](https://github.com/isaacs/minimatch)
|
||||||
|
|
||||||
|
## glob.hasMagic(pattern, [options])
|
||||||
|
|
||||||
|
Returns `true` if there are any special characters in the pattern, and
|
||||||
|
`false` otherwise.
|
||||||
|
|
||||||
|
Note that the options affect the results. If `noext:true` is set in
|
||||||
|
the options object, then `+(a|b)` will not be considered a magic
|
||||||
|
pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}`
|
||||||
|
then that is considered magical, unless `nobrace:true` is set in the
|
||||||
|
options.
|
||||||
|
|
||||||
|
## glob(pattern, [options], cb)
|
||||||
|
|
||||||
|
* `pattern` `{String}` Pattern to be matched
|
||||||
|
* `options` `{Object}`
|
||||||
|
* `cb` `{Function}`
|
||||||
|
* `err` `{Error | null}`
|
||||||
|
* `matches` `{Array<String>}` filenames found matching the pattern
|
||||||
|
|
||||||
|
Perform an asynchronous glob search.
|
||||||
|
|
||||||
|
## glob.sync(pattern, [options])
|
||||||
|
|
||||||
|
* `pattern` `{String}` Pattern to be matched
|
||||||
|
* `options` `{Object}`
|
||||||
|
* return: `{Array<String>}` filenames found matching the pattern
|
||||||
|
|
||||||
|
Perform a synchronous glob search.
|
||||||
|
|
||||||
|
## Class: glob.Glob
|
||||||
|
|
||||||
|
Create a Glob object by instantiating the `glob.Glob` class.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var Glob = require("glob").Glob
|
||||||
|
var mg = new Glob(pattern, options, cb)
|
||||||
|
```
|
||||||
|
|
||||||
|
It's an EventEmitter, and starts walking the filesystem to find matches
|
||||||
|
immediately.
|
||||||
|
|
||||||
|
### new glob.Glob(pattern, [options], [cb])
|
||||||
|
|
||||||
|
* `pattern` `{String}` pattern to search for
|
||||||
|
* `options` `{Object}`
|
||||||
|
* `cb` `{Function}` Called when an error occurs, or matches are found
|
||||||
|
* `err` `{Error | null}`
|
||||||
|
* `matches` `{Array<String>}` filenames found matching the pattern
|
||||||
|
|
||||||
|
Note that if the `sync` flag is set in the options, then matches will
|
||||||
|
be immediately available on the `g.found` member.
|
||||||
|
|
||||||
|
### Properties
|
||||||
|
|
||||||
|
* `minimatch` The minimatch object that the glob uses.
|
||||||
|
* `options` The options object passed in.
|
||||||
|
* `aborted` Boolean which is set to true when calling `abort()`. There
|
||||||
|
is no way at this time to continue a glob search after aborting, but
|
||||||
|
you can re-use the statCache to avoid having to duplicate syscalls.
|
||||||
|
* `cache` Convenience object. Each field has the following possible
|
||||||
|
values:
|
||||||
|
* `false` - Path does not exist
|
||||||
|
* `true` - Path exists
|
||||||
|
* `'FILE'` - Path exists, and is not a directory
|
||||||
|
* `'DIR'` - Path exists, and is a directory
|
||||||
|
* `[file, entries, ...]` - Path exists, is a directory, and the
|
||||||
|
array value is the results of `fs.readdir`
|
||||||
|
* `statCache` Cache of `fs.stat` results, to prevent statting the same
|
||||||
|
path multiple times.
|
||||||
|
* `symlinks` A record of which paths are symbolic links, which is
|
||||||
|
relevant in resolving `**` patterns.
|
||||||
|
* `realpathCache` An optional object which is passed to `fs.realpath`
|
||||||
|
to minimize unnecessary syscalls. It is stored on the instantiated
|
||||||
|
Glob object, and may be re-used.
|
||||||
|
|
||||||
|
### Events
|
||||||
|
|
||||||
|
* `end` When the matching is finished, this is emitted with all the
|
||||||
|
matches found. If the `nonull` option is set, and no match was found,
|
||||||
|
then the `matches` list contains the original pattern. The matches
|
||||||
|
are sorted, unless the `nosort` flag is set.
|
||||||
|
* `match` Every time a match is found, this is emitted with the specific
|
||||||
|
thing that matched. It is not deduplicated or resolved to a realpath.
|
||||||
|
* `error` Emitted when an unexpected error is encountered, or whenever
|
||||||
|
any fs error occurs if `options.strict` is set.
|
||||||
|
* `abort` When `abort()` is called, this event is raised.
|
||||||
|
|
||||||
|
### Methods
|
||||||
|
|
||||||
|
* `pause` Temporarily stop the search
|
||||||
|
* `resume` Resume the search
|
||||||
|
* `abort` Stop the search forever
|
||||||
|
|
||||||
|
### Options
|
||||||
|
|
||||||
|
All the options that can be passed to Minimatch can also be passed to
|
||||||
|
Glob to change pattern matching behavior. Also, some have been added,
|
||||||
|
or have glob-specific ramifications.
|
||||||
|
|
||||||
|
All options are false by default, unless otherwise noted.
|
||||||
|
|
||||||
|
All options are added to the Glob object, as well.
|
||||||
|
|
||||||
|
If you are running many `glob` operations, you can pass a Glob object
|
||||||
|
as the `options` argument to a subsequent operation to shortcut some
|
||||||
|
`stat` and `readdir` calls. At the very least, you may pass in shared
|
||||||
|
`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that
|
||||||
|
parallel glob operations will be sped up by sharing information about
|
||||||
|
the filesystem.
|
||||||
|
|
||||||
|
* `cwd` The current working directory in which to search. Defaults
|
||||||
|
to `process.cwd()`.
|
||||||
|
* `root` The place where patterns starting with `/` will be mounted
|
||||||
|
onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix
|
||||||
|
systems, and `C:\` or some such on Windows.)
|
||||||
|
* `dot` Include `.dot` files in normal matches and `globstar` matches.
|
||||||
|
Note that an explicit dot in a portion of the pattern will always
|
||||||
|
match dot files.
|
||||||
|
* `nomount` By default, a pattern starting with a forward-slash will be
|
||||||
|
"mounted" onto the root setting, so that a valid filesystem path is
|
||||||
|
returned. Set this flag to disable that behavior.
|
||||||
|
* `mark` Add a `/` character to directory matches. Note that this
|
||||||
|
requires additional stat calls.
|
||||||
|
* `nosort` Don't sort the results.
|
||||||
|
* `stat` Set to true to stat *all* results. This reduces performance
|
||||||
|
somewhat, and is completely unnecessary, unless `readdir` is presumed
|
||||||
|
to be an untrustworthy indicator of file existence.
|
||||||
|
* `silent` When an unusual error is encountered when attempting to
|
||||||
|
read a directory, a warning will be printed to stderr. Set the
|
||||||
|
`silent` option to true to suppress these warnings.
|
||||||
|
* `strict` When an unusual error is encountered when attempting to
|
||||||
|
read a directory, the process will just continue on in search of
|
||||||
|
other matches. Set the `strict` option to raise an error in these
|
||||||
|
cases.
|
||||||
|
* `cache` See `cache` property above. Pass in a previously generated
|
||||||
|
cache object to save some fs calls.
|
||||||
|
* `statCache` A cache of results of filesystem information, to prevent
|
||||||
|
unnecessary stat calls. While it should not normally be necessary
|
||||||
|
to set this, you may pass the statCache from one glob() call to the
|
||||||
|
options object of another, if you know that the filesystem will not
|
||||||
|
change between calls. (See "Race Conditions" below.)
|
||||||
|
* `symlinks` A cache of known symbolic links. You may pass in a
|
||||||
|
previously generated `symlinks` object to save `lstat` calls when
|
||||||
|
resolving `**` matches.
|
||||||
|
* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead.
|
||||||
|
* `nounique` In some cases, brace-expanded patterns can result in the
|
||||||
|
same file showing up multiple times in the result set. By default,
|
||||||
|
this implementation prevents duplicates in the result set. Set this
|
||||||
|
flag to disable that behavior.
|
||||||
|
* `nonull` Set to never return an empty set, instead returning a set
|
||||||
|
containing the pattern itself. This is the default in glob(3).
|
||||||
|
* `debug` Set to enable debug logging in minimatch and glob.
|
||||||
|
* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets.
|
||||||
|
* `noglobstar` Do not match `**` against multiple filenames. (Ie,
|
||||||
|
treat it as a normal `*` instead.)
|
||||||
|
* `noext` Do not match `+(a|b)` "extglob" patterns.
|
||||||
|
* `nocase` Perform a case-insensitive match. Note: on
|
||||||
|
case-insensitive filesystems, non-magic patterns will match by
|
||||||
|
default, since `stat` and `readdir` will not raise errors.
|
||||||
|
* `matchBase` Perform a basename-only match if the pattern does not
|
||||||
|
contain any slash characters. That is, `*.js` would be treated as
|
||||||
|
equivalent to `**/*.js`, matching all js files in all directories.
|
||||||
|
* `nodir` Do not match directories, only files. (Note: to match
|
||||||
|
*only* directories, simply put a `/` at the end of the pattern.)
|
||||||
|
* `ignore` Add a pattern or an array of glob patterns to exclude matches.
|
||||||
|
Note: `ignore` patterns are *always* in `dot:true` mode, regardless
|
||||||
|
of any other settings.
|
||||||
|
* `follow` Follow symlinked directories when expanding `**` patterns.
|
||||||
|
Note that this can result in a lot of duplicate references in the
|
||||||
|
presence of cyclic links.
|
||||||
|
* `realpath` Set to true to call `fs.realpath` on all of the results.
|
||||||
|
In the case of a symlink that cannot be resolved, the full absolute
|
||||||
|
path to the matched entry is returned (though it will usually be a
|
||||||
|
broken symlink)
|
||||||
|
|
||||||
|
## Comparisons to other fnmatch/glob implementations
|
||||||
|
|
||||||
|
While strict compliance with the existing standards is a worthwhile
|
||||||
|
goal, some discrepancies exist between node-glob and other
|
||||||
|
implementations, and are intentional.
|
||||||
|
|
||||||
|
The double-star character `**` is supported by default, unless the
|
||||||
|
`noglobstar` flag is set. This is supported in the manner of bsdglob
|
||||||
|
and bash 4.3, where `**` only has special significance if it is the only
|
||||||
|
thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
|
||||||
|
`a/**b` will not.
|
||||||
|
|
||||||
|
Note that symlinked directories are not crawled as part of a `**`,
|
||||||
|
though their contents may match against subsequent portions of the
|
||||||
|
pattern. This prevents infinite loops and duplicates and the like.
|
||||||
|
|
||||||
|
If an escaped pattern has no matches, and the `nonull` flag is set,
|
||||||
|
then glob returns the pattern as-provided, rather than
|
||||||
|
interpreting the character escapes. For example,
|
||||||
|
`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
|
||||||
|
`"*a?"`. This is akin to setting the `nullglob` option in bash, except
|
||||||
|
that it does not resolve escaped pattern characters.
|
||||||
|
|
||||||
|
If brace expansion is not disabled, then it is performed before any
|
||||||
|
other interpretation of the glob pattern. Thus, a pattern like
|
||||||
|
`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
|
||||||
|
**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
|
||||||
|
checked for validity. Since those two are valid, matching proceeds.
|
||||||
|
|
||||||
|
### Comments and Negation
|
||||||
|
|
||||||
|
Previously, this module let you mark a pattern as a "comment" if it
|
||||||
|
started with a `#` character, or a "negated" pattern if it started
|
||||||
|
with a `!` character.
|
||||||
|
|
||||||
|
These options were deprecated in version 5, and removed in version 6.
|
||||||
|
|
||||||
|
To specify things that should not match, use the `ignore` option.
|
||||||
|
|
||||||
|
## Windows
|
||||||
|
|
||||||
|
**Please only use forward-slashes in glob expressions.**
|
||||||
|
|
||||||
|
Though windows uses either `/` or `\` as its path separator, only `/`
|
||||||
|
characters are used by this glob implementation. You must use
|
||||||
|
forward-slashes **only** in glob expressions. Back-slashes will always
|
||||||
|
be interpreted as escape characters, not path separators.
|
||||||
|
|
||||||
|
Results from absolute patterns such as `/foo/*` are mounted onto the
|
||||||
|
root setting using `path.join`. On windows, this will by default result
|
||||||
|
in `/foo/*` matching `C:\foo\bar.txt`.
|
||||||
|
|
||||||
|
## Race Conditions
|
||||||
|
|
||||||
|
Glob searching, by its very nature, is susceptible to race conditions,
|
||||||
|
since it relies on directory walking and such.
|
||||||
|
|
||||||
|
As a result, it is possible that a file that exists when glob looks for
|
||||||
|
it may have been deleted or modified by the time it returns the result.
|
||||||
|
|
||||||
|
As part of its internal implementation, this program caches all stat
|
||||||
|
and readdir calls that it makes, in order to cut down on system
|
||||||
|
overhead. However, this also makes it even more susceptible to races,
|
||||||
|
especially if the cache or statCache objects are reused between glob
|
||||||
|
calls.
|
||||||
|
|
||||||
|
Users are thus advised not to use a glob result as a guarantee of
|
||||||
|
filesystem state in the face of rapid changes. For the vast majority
|
||||||
|
of operations, this is never a problem.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Any change to behavior (including bugfixes) must come with a test.
|
||||||
|
|
||||||
|
Patches that fail tests or reduce performance will be rejected.
|
||||||
|
|
||||||
|
```
|
||||||
|
# to run tests
|
||||||
|
npm test
|
||||||
|
|
||||||
|
# to re-generate test fixtures
|
||||||
|
npm run test-regen
|
||||||
|
|
||||||
|
# to benchmark against bash/zsh
|
||||||
|
npm run bench
|
||||||
|
|
||||||
|
# to profile javascript
|
||||||
|
npm run prof
|
||||||
|
```
|
226
src/node_modules/fs-extra/node_modules/glob/common.js
generated
vendored
Normal file
226
src/node_modules/fs-extra/node_modules/glob/common.js
generated
vendored
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
exports.alphasort = alphasort
|
||||||
|
exports.alphasorti = alphasorti
|
||||||
|
exports.setopts = setopts
|
||||||
|
exports.ownProp = ownProp
|
||||||
|
exports.makeAbs = makeAbs
|
||||||
|
exports.finish = finish
|
||||||
|
exports.mark = mark
|
||||||
|
exports.isIgnored = isIgnored
|
||||||
|
exports.childrenIgnored = childrenIgnored
|
||||||
|
|
||||||
|
function ownProp (obj, field) {
|
||||||
|
return Object.prototype.hasOwnProperty.call(obj, field)
|
||||||
|
}
|
||||||
|
|
||||||
|
var path = require("path")
|
||||||
|
var minimatch = require("minimatch")
|
||||||
|
var isAbsolute = require("path-is-absolute")
|
||||||
|
var Minimatch = minimatch.Minimatch
|
||||||
|
|
||||||
|
function alphasorti (a, b) {
|
||||||
|
return a.toLowerCase().localeCompare(b.toLowerCase())
|
||||||
|
}
|
||||||
|
|
||||||
|
function alphasort (a, b) {
|
||||||
|
return a.localeCompare(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
function setupIgnores (self, options) {
|
||||||
|
self.ignore = options.ignore || []
|
||||||
|
|
||||||
|
if (!Array.isArray(self.ignore))
|
||||||
|
self.ignore = [self.ignore]
|
||||||
|
|
||||||
|
if (self.ignore.length) {
|
||||||
|
self.ignore = self.ignore.map(ignoreMap)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ignore patterns are always in dot:true mode.
|
||||||
|
function ignoreMap (pattern) {
|
||||||
|
var gmatcher = null
|
||||||
|
if (pattern.slice(-3) === '/**') {
|
||||||
|
var gpattern = pattern.replace(/(\/\*\*)+$/, '')
|
||||||
|
gmatcher = new Minimatch(gpattern, { dot: true })
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
matcher: new Minimatch(pattern, { dot: true }),
|
||||||
|
gmatcher: gmatcher
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setopts (self, pattern, options) {
|
||||||
|
if (!options)
|
||||||
|
options = {}
|
||||||
|
|
||||||
|
// base-matching: just use globstar for that.
|
||||||
|
if (options.matchBase && -1 === pattern.indexOf("/")) {
|
||||||
|
if (options.noglobstar) {
|
||||||
|
throw new Error("base matching requires globstar")
|
||||||
|
}
|
||||||
|
pattern = "**/" + pattern
|
||||||
|
}
|
||||||
|
|
||||||
|
self.silent = !!options.silent
|
||||||
|
self.pattern = pattern
|
||||||
|
self.strict = options.strict !== false
|
||||||
|
self.realpath = !!options.realpath
|
||||||
|
self.realpathCache = options.realpathCache || Object.create(null)
|
||||||
|
self.follow = !!options.follow
|
||||||
|
self.dot = !!options.dot
|
||||||
|
self.mark = !!options.mark
|
||||||
|
self.nodir = !!options.nodir
|
||||||
|
if (self.nodir)
|
||||||
|
self.mark = true
|
||||||
|
self.sync = !!options.sync
|
||||||
|
self.nounique = !!options.nounique
|
||||||
|
self.nonull = !!options.nonull
|
||||||
|
self.nosort = !!options.nosort
|
||||||
|
self.nocase = !!options.nocase
|
||||||
|
self.stat = !!options.stat
|
||||||
|
self.noprocess = !!options.noprocess
|
||||||
|
|
||||||
|
self.maxLength = options.maxLength || Infinity
|
||||||
|
self.cache = options.cache || Object.create(null)
|
||||||
|
self.statCache = options.statCache || Object.create(null)
|
||||||
|
self.symlinks = options.symlinks || Object.create(null)
|
||||||
|
|
||||||
|
setupIgnores(self, options)
|
||||||
|
|
||||||
|
self.changedCwd = false
|
||||||
|
var cwd = process.cwd()
|
||||||
|
if (!ownProp(options, "cwd"))
|
||||||
|
self.cwd = cwd
|
||||||
|
else {
|
||||||
|
self.cwd = path.resolve(options.cwd)
|
||||||
|
self.changedCwd = self.cwd !== cwd
|
||||||
|
}
|
||||||
|
|
||||||
|
self.root = options.root || path.resolve(self.cwd, "/")
|
||||||
|
self.root = path.resolve(self.root)
|
||||||
|
if (process.platform === "win32")
|
||||||
|
self.root = self.root.replace(/\\/g, "/")
|
||||||
|
|
||||||
|
self.nomount = !!options.nomount
|
||||||
|
|
||||||
|
// disable comments and negation in Minimatch.
|
||||||
|
// Note that they are not supported in Glob itself anyway.
|
||||||
|
options.nonegate = true
|
||||||
|
options.nocomment = true
|
||||||
|
|
||||||
|
self.minimatch = new Minimatch(pattern, options)
|
||||||
|
self.options = self.minimatch.options
|
||||||
|
}
|
||||||
|
|
||||||
|
function finish (self) {
|
||||||
|
var nou = self.nounique
|
||||||
|
var all = nou ? [] : Object.create(null)
|
||||||
|
|
||||||
|
for (var i = 0, l = self.matches.length; i < l; i ++) {
|
||||||
|
var matches = self.matches[i]
|
||||||
|
if (!matches || Object.keys(matches).length === 0) {
|
||||||
|
if (self.nonull) {
|
||||||
|
// do like the shell, and spit out the literal glob
|
||||||
|
var literal = self.minimatch.globSet[i]
|
||||||
|
if (nou)
|
||||||
|
all.push(literal)
|
||||||
|
else
|
||||||
|
all[literal] = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// had matches
|
||||||
|
var m = Object.keys(matches)
|
||||||
|
if (nou)
|
||||||
|
all.push.apply(all, m)
|
||||||
|
else
|
||||||
|
m.forEach(function (m) {
|
||||||
|
all[m] = true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!nou)
|
||||||
|
all = Object.keys(all)
|
||||||
|
|
||||||
|
if (!self.nosort)
|
||||||
|
all = all.sort(self.nocase ? alphasorti : alphasort)
|
||||||
|
|
||||||
|
// at *some* point we statted all of these
|
||||||
|
if (self.mark) {
|
||||||
|
for (var i = 0; i < all.length; i++) {
|
||||||
|
all[i] = self._mark(all[i])
|
||||||
|
}
|
||||||
|
if (self.nodir) {
|
||||||
|
all = all.filter(function (e) {
|
||||||
|
return !(/\/$/.test(e))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.ignore.length)
|
||||||
|
all = all.filter(function(m) {
|
||||||
|
return !isIgnored(self, m)
|
||||||
|
})
|
||||||
|
|
||||||
|
self.found = all
|
||||||
|
}
|
||||||
|
|
||||||
|
function mark (self, p) {
|
||||||
|
var abs = makeAbs(self, p)
|
||||||
|
var c = self.cache[abs]
|
||||||
|
var m = p
|
||||||
|
if (c) {
|
||||||
|
var isDir = c === 'DIR' || Array.isArray(c)
|
||||||
|
var slash = p.slice(-1) === '/'
|
||||||
|
|
||||||
|
if (isDir && !slash)
|
||||||
|
m += '/'
|
||||||
|
else if (!isDir && slash)
|
||||||
|
m = m.slice(0, -1)
|
||||||
|
|
||||||
|
if (m !== p) {
|
||||||
|
var mabs = makeAbs(self, m)
|
||||||
|
self.statCache[mabs] = self.statCache[abs]
|
||||||
|
self.cache[mabs] = self.cache[abs]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
// lotta situps...
|
||||||
|
function makeAbs (self, f) {
|
||||||
|
var abs = f
|
||||||
|
if (f.charAt(0) === '/') {
|
||||||
|
abs = path.join(self.root, f)
|
||||||
|
} else if (isAbsolute(f) || f === '') {
|
||||||
|
abs = f
|
||||||
|
} else if (self.changedCwd) {
|
||||||
|
abs = path.resolve(self.cwd, f)
|
||||||
|
} else {
|
||||||
|
abs = path.resolve(f)
|
||||||
|
}
|
||||||
|
return abs
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Return true, if pattern ends with globstar '**', for the accompanying parent directory.
|
||||||
|
// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents
|
||||||
|
function isIgnored (self, path) {
|
||||||
|
if (!self.ignore.length)
|
||||||
|
return false
|
||||||
|
|
||||||
|
return self.ignore.some(function(item) {
|
||||||
|
return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function childrenIgnored (self, path) {
|
||||||
|
if (!self.ignore.length)
|
||||||
|
return false
|
||||||
|
|
||||||
|
return self.ignore.some(function(item) {
|
||||||
|
return !!(item.gmatcher && item.gmatcher.match(path))
|
||||||
|
})
|
||||||
|
}
|
772
src/node_modules/fs-extra/node_modules/glob/glob.js
generated
vendored
Normal file
772
src/node_modules/fs-extra/node_modules/glob/glob.js
generated
vendored
Normal file
@ -0,0 +1,772 @@
|
|||||||
|
// Approach:
|
||||||
|
//
|
||||||
|
// 1. Get the minimatch set
|
||||||
|
// 2. For each pattern in the set, PROCESS(pattern, false)
|
||||||
|
// 3. Store matches per-set, then uniq them
|
||||||
|
//
|
||||||
|
// PROCESS(pattern, inGlobStar)
|
||||||
|
// Get the first [n] items from pattern that are all strings
|
||||||
|
// Join these together. This is PREFIX.
|
||||||
|
// If there is no more remaining, then stat(PREFIX) and
|
||||||
|
// add to matches if it succeeds. END.
|
||||||
|
//
|
||||||
|
// If inGlobStar and PREFIX is symlink and points to dir
|
||||||
|
// set ENTRIES = []
|
||||||
|
// else readdir(PREFIX) as ENTRIES
|
||||||
|
// If fail, END
|
||||||
|
//
|
||||||
|
// with ENTRIES
|
||||||
|
// If pattern[n] is GLOBSTAR
|
||||||
|
// // handle the case where the globstar match is empty
|
||||||
|
// // by pruning it out, and testing the resulting pattern
|
||||||
|
// PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
|
||||||
|
// // handle other cases.
|
||||||
|
// for ENTRY in ENTRIES (not dotfiles)
|
||||||
|
// // attach globstar + tail onto the entry
|
||||||
|
// // Mark that this entry is a globstar match
|
||||||
|
// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
|
||||||
|
//
|
||||||
|
// else // not globstar
|
||||||
|
// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
|
||||||
|
// Test ENTRY against pattern[n]
|
||||||
|
// If fails, continue
|
||||||
|
// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
|
||||||
|
//
|
||||||
|
// Caveat:
|
||||||
|
// Cache all stats and readdirs results to minimize syscall. Since all
|
||||||
|
// we ever care about is existence and directory-ness, we can just keep
|
||||||
|
// `true` for files, and [children,...] for directories, or `false` for
|
||||||
|
// things that don't exist.
|
||||||
|
|
||||||
|
module.exports = glob
|
||||||
|
|
||||||
|
var fs = require('fs')
|
||||||
|
var minimatch = require('minimatch')
|
||||||
|
var Minimatch = minimatch.Minimatch
|
||||||
|
var inherits = require('inherits')
|
||||||
|
var EE = require('events').EventEmitter
|
||||||
|
var path = require('path')
|
||||||
|
var assert = require('assert')
|
||||||
|
var isAbsolute = require('path-is-absolute')
|
||||||
|
var globSync = require('./sync.js')
|
||||||
|
var common = require('./common.js')
|
||||||
|
var alphasort = common.alphasort
|
||||||
|
var alphasorti = common.alphasorti
|
||||||
|
var setopts = common.setopts
|
||||||
|
var ownProp = common.ownProp
|
||||||
|
var inflight = require('inflight')
|
||||||
|
var util = require('util')
|
||||||
|
var childrenIgnored = common.childrenIgnored
|
||||||
|
var isIgnored = common.isIgnored
|
||||||
|
|
||||||
|
var once = require('once')
|
||||||
|
|
||||||
|
function glob (pattern, options, cb) {
|
||||||
|
if (typeof options === 'function') cb = options, options = {}
|
||||||
|
if (!options) options = {}
|
||||||
|
|
||||||
|
if (options.sync) {
|
||||||
|
if (cb)
|
||||||
|
throw new TypeError('callback provided to sync glob')
|
||||||
|
return globSync(pattern, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Glob(pattern, options, cb)
|
||||||
|
}
|
||||||
|
|
||||||
|
glob.sync = globSync
|
||||||
|
var GlobSync = glob.GlobSync = globSync.GlobSync
|
||||||
|
|
||||||
|
// old api surface
|
||||||
|
glob.glob = glob
|
||||||
|
|
||||||
|
function extend (origin, add) {
|
||||||
|
if (add === null || typeof add !== 'object') {
|
||||||
|
return origin
|
||||||
|
}
|
||||||
|
|
||||||
|
var keys = Object.keys(add)
|
||||||
|
var i = keys.length
|
||||||
|
while (i--) {
|
||||||
|
origin[keys[i]] = add[keys[i]]
|
||||||
|
}
|
||||||
|
return origin
|
||||||
|
}
|
||||||
|
|
||||||
|
glob.hasMagic = function (pattern, options_) {
|
||||||
|
var options = extend({}, options_)
|
||||||
|
options.noprocess = true
|
||||||
|
|
||||||
|
var g = new Glob(pattern, options)
|
||||||
|
var set = g.minimatch.set
|
||||||
|
if (set.length > 1)
|
||||||
|
return true
|
||||||
|
|
||||||
|
for (var j = 0; j < set[0].length; j++) {
|
||||||
|
if (typeof set[0][j] !== 'string')
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
glob.Glob = Glob
|
||||||
|
inherits(Glob, EE)
|
||||||
|
function Glob (pattern, options, cb) {
|
||||||
|
if (typeof options === 'function') {
|
||||||
|
cb = options
|
||||||
|
options = null
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options && options.sync) {
|
||||||
|
if (cb)
|
||||||
|
throw new TypeError('callback provided to sync glob')
|
||||||
|
return new GlobSync(pattern, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(this instanceof Glob))
|
||||||
|
return new Glob(pattern, options, cb)
|
||||||
|
|
||||||
|
setopts(this, pattern, options)
|
||||||
|
this._didRealPath = false
|
||||||
|
|
||||||
|
// process each pattern in the minimatch set
|
||||||
|
var n = this.minimatch.set.length
|
||||||
|
|
||||||
|
// The matches are stored as {<filename>: true,...} so that
|
||||||
|
// duplicates are automagically pruned.
|
||||||
|
// Later, we do an Object.keys() on these.
|
||||||
|
// Keep them as a list so we can fill in when nonull is set.
|
||||||
|
this.matches = new Array(n)
|
||||||
|
|
||||||
|
if (typeof cb === 'function') {
|
||||||
|
cb = once(cb)
|
||||||
|
this.on('error', cb)
|
||||||
|
this.on('end', function (matches) {
|
||||||
|
cb(null, matches)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
var self = this
|
||||||
|
var n = this.minimatch.set.length
|
||||||
|
this._processing = 0
|
||||||
|
this.matches = new Array(n)
|
||||||
|
|
||||||
|
this._emitQueue = []
|
||||||
|
this._processQueue = []
|
||||||
|
this.paused = false
|
||||||
|
|
||||||
|
if (this.noprocess)
|
||||||
|
return this
|
||||||
|
|
||||||
|
if (n === 0)
|
||||||
|
return done()
|
||||||
|
|
||||||
|
for (var i = 0; i < n; i ++) {
|
||||||
|
this._process(this.minimatch.set[i], i, false, done)
|
||||||
|
}
|
||||||
|
|
||||||
|
function done () {
|
||||||
|
--self._processing
|
||||||
|
if (self._processing <= 0)
|
||||||
|
self._finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._finish = function () {
|
||||||
|
assert(this instanceof Glob)
|
||||||
|
if (this.aborted)
|
||||||
|
return
|
||||||
|
|
||||||
|
if (this.realpath && !this._didRealpath)
|
||||||
|
return this._realpath()
|
||||||
|
|
||||||
|
common.finish(this)
|
||||||
|
this.emit('end', this.found)
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._realpath = function () {
|
||||||
|
if (this._didRealpath)
|
||||||
|
return
|
||||||
|
|
||||||
|
this._didRealpath = true
|
||||||
|
|
||||||
|
var n = this.matches.length
|
||||||
|
if (n === 0)
|
||||||
|
return this._finish()
|
||||||
|
|
||||||
|
var self = this
|
||||||
|
for (var i = 0; i < this.matches.length; i++)
|
||||||
|
this._realpathSet(i, next)
|
||||||
|
|
||||||
|
function next () {
|
||||||
|
if (--n === 0)
|
||||||
|
self._finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._realpathSet = function (index, cb) {
|
||||||
|
var matchset = this.matches[index]
|
||||||
|
if (!matchset)
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
var found = Object.keys(matchset)
|
||||||
|
var self = this
|
||||||
|
var n = found.length
|
||||||
|
|
||||||
|
if (n === 0)
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
var set = this.matches[index] = Object.create(null)
|
||||||
|
found.forEach(function (p, i) {
|
||||||
|
// If there's a problem with the stat, then it means that
|
||||||
|
// one or more of the links in the realpath couldn't be
|
||||||
|
// resolved. just return the abs value in that case.
|
||||||
|
p = self._makeAbs(p)
|
||||||
|
fs.realpath(p, self.realpathCache, function (er, real) {
|
||||||
|
if (!er)
|
||||||
|
set[real] = true
|
||||||
|
else if (er.syscall === 'stat')
|
||||||
|
set[p] = true
|
||||||
|
else
|
||||||
|
self.emit('error', er) // srsly wtf right here
|
||||||
|
|
||||||
|
if (--n === 0) {
|
||||||
|
self.matches[index] = set
|
||||||
|
cb()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._mark = function (p) {
|
||||||
|
return common.mark(this, p)
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._makeAbs = function (f) {
|
||||||
|
return common.makeAbs(this, f)
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype.abort = function () {
|
||||||
|
this.aborted = true
|
||||||
|
this.emit('abort')
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype.pause = function () {
|
||||||
|
if (!this.paused) {
|
||||||
|
this.paused = true
|
||||||
|
this.emit('pause')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype.resume = function () {
|
||||||
|
if (this.paused) {
|
||||||
|
this.emit('resume')
|
||||||
|
this.paused = false
|
||||||
|
if (this._emitQueue.length) {
|
||||||
|
var eq = this._emitQueue.slice(0)
|
||||||
|
this._emitQueue.length = 0
|
||||||
|
for (var i = 0; i < eq.length; i ++) {
|
||||||
|
var e = eq[i]
|
||||||
|
this._emitMatch(e[0], e[1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this._processQueue.length) {
|
||||||
|
var pq = this._processQueue.slice(0)
|
||||||
|
this._processQueue.length = 0
|
||||||
|
for (var i = 0; i < pq.length; i ++) {
|
||||||
|
var p = pq[i]
|
||||||
|
this._processing--
|
||||||
|
this._process(p[0], p[1], p[2], p[3])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._process = function (pattern, index, inGlobStar, cb) {
|
||||||
|
assert(this instanceof Glob)
|
||||||
|
assert(typeof cb === 'function')
|
||||||
|
|
||||||
|
if (this.aborted)
|
||||||
|
return
|
||||||
|
|
||||||
|
this._processing++
|
||||||
|
if (this.paused) {
|
||||||
|
this._processQueue.push([pattern, index, inGlobStar, cb])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//console.error('PROCESS %d', this._processing, pattern)
|
||||||
|
|
||||||
|
// Get the first [n] parts of pattern that are all strings.
|
||||||
|
var n = 0
|
||||||
|
while (typeof pattern[n] === 'string') {
|
||||||
|
n ++
|
||||||
|
}
|
||||||
|
// now n is the index of the first one that is *not* a string.
|
||||||
|
|
||||||
|
// see if there's anything else
|
||||||
|
var prefix
|
||||||
|
switch (n) {
|
||||||
|
// if not, then this is rather simple
|
||||||
|
case pattern.length:
|
||||||
|
this._processSimple(pattern.join('/'), index, cb)
|
||||||
|
return
|
||||||
|
|
||||||
|
case 0:
|
||||||
|
// pattern *starts* with some non-trivial item.
|
||||||
|
// going to readdir(cwd), but not include the prefix in matches.
|
||||||
|
prefix = null
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
// pattern has some string bits in the front.
|
||||||
|
// whatever it starts with, whether that's 'absolute' like /foo/bar,
|
||||||
|
// or 'relative' like '../baz'
|
||||||
|
prefix = pattern.slice(0, n).join('/')
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
var remain = pattern.slice(n)
|
||||||
|
|
||||||
|
// get the list of entries.
|
||||||
|
var read
|
||||||
|
if (prefix === null)
|
||||||
|
read = '.'
|
||||||
|
else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
|
||||||
|
if (!prefix || !isAbsolute(prefix))
|
||||||
|
prefix = '/' + prefix
|
||||||
|
read = prefix
|
||||||
|
} else
|
||||||
|
read = prefix
|
||||||
|
|
||||||
|
var abs = this._makeAbs(read)
|
||||||
|
|
||||||
|
//if ignored, skip _processing
|
||||||
|
if (childrenIgnored(this, read))
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
var isGlobStar = remain[0] === minimatch.GLOBSTAR
|
||||||
|
if (isGlobStar)
|
||||||
|
this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)
|
||||||
|
else
|
||||||
|
this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {
|
||||||
|
var self = this
|
||||||
|
this._readdir(abs, inGlobStar, function (er, entries) {
|
||||||
|
return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
|
||||||
|
|
||||||
|
// if the abs isn't a dir, then nothing can match!
|
||||||
|
if (!entries)
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
// It will only match dot entries if it starts with a dot, or if
|
||||||
|
// dot is set. Stuff like @(.foo|.bar) isn't allowed.
|
||||||
|
var pn = remain[0]
|
||||||
|
var negate = !!this.minimatch.negate
|
||||||
|
var rawGlob = pn._glob
|
||||||
|
var dotOk = this.dot || rawGlob.charAt(0) === '.'
|
||||||
|
|
||||||
|
var matchedEntries = []
|
||||||
|
for (var i = 0; i < entries.length; i++) {
|
||||||
|
var e = entries[i]
|
||||||
|
if (e.charAt(0) !== '.' || dotOk) {
|
||||||
|
var m
|
||||||
|
if (negate && !prefix) {
|
||||||
|
m = !e.match(pn)
|
||||||
|
} else {
|
||||||
|
m = e.match(pn)
|
||||||
|
}
|
||||||
|
if (m)
|
||||||
|
matchedEntries.push(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)
|
||||||
|
|
||||||
|
var len = matchedEntries.length
|
||||||
|
// If there are no matched entries, then nothing matches.
|
||||||
|
if (len === 0)
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
// if this is the last remaining pattern bit, then no need for
|
||||||
|
// an additional stat *unless* the user has specified mark or
|
||||||
|
// stat explicitly. We know they exist, since readdir returned
|
||||||
|
// them.
|
||||||
|
|
||||||
|
if (remain.length === 1 && !this.mark && !this.stat) {
|
||||||
|
if (!this.matches[index])
|
||||||
|
this.matches[index] = Object.create(null)
|
||||||
|
|
||||||
|
for (var i = 0; i < len; i ++) {
|
||||||
|
var e = matchedEntries[i]
|
||||||
|
if (prefix) {
|
||||||
|
if (prefix !== '/')
|
||||||
|
e = prefix + '/' + e
|
||||||
|
else
|
||||||
|
e = prefix + e
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.charAt(0) === '/' && !this.nomount) {
|
||||||
|
e = path.join(this.root, e)
|
||||||
|
}
|
||||||
|
this._emitMatch(index, e)
|
||||||
|
}
|
||||||
|
// This was the last one, and no stats were needed
|
||||||
|
return cb()
|
||||||
|
}
|
||||||
|
|
||||||
|
// now test all matched entries as stand-ins for that part
|
||||||
|
// of the pattern.
|
||||||
|
remain.shift()
|
||||||
|
for (var i = 0; i < len; i ++) {
|
||||||
|
var e = matchedEntries[i]
|
||||||
|
var newPattern
|
||||||
|
if (prefix) {
|
||||||
|
if (prefix !== '/')
|
||||||
|
e = prefix + '/' + e
|
||||||
|
else
|
||||||
|
e = prefix + e
|
||||||
|
}
|
||||||
|
this._process([e].concat(remain), index, inGlobStar, cb)
|
||||||
|
}
|
||||||
|
cb()
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._emitMatch = function (index, e) {
|
||||||
|
if (this.aborted)
|
||||||
|
return
|
||||||
|
|
||||||
|
if (this.matches[index][e])
|
||||||
|
return
|
||||||
|
|
||||||
|
if (isIgnored(this, e))
|
||||||
|
return
|
||||||
|
|
||||||
|
if (this.paused) {
|
||||||
|
this._emitQueue.push([index, e])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var abs = this._makeAbs(e)
|
||||||
|
|
||||||
|
if (this.nodir) {
|
||||||
|
var c = this.cache[abs]
|
||||||
|
if (c === 'DIR' || Array.isArray(c))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.mark)
|
||||||
|
e = this._mark(e)
|
||||||
|
|
||||||
|
this.matches[index][e] = true
|
||||||
|
|
||||||
|
var st = this.statCache[abs]
|
||||||
|
if (st)
|
||||||
|
this.emit('stat', e, st)
|
||||||
|
|
||||||
|
this.emit('match', e)
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._readdirInGlobStar = function (abs, cb) {
|
||||||
|
if (this.aborted)
|
||||||
|
return
|
||||||
|
|
||||||
|
// follow all symlinked directories forever
|
||||||
|
// just proceed as if this is a non-globstar situation
|
||||||
|
if (this.follow)
|
||||||
|
return this._readdir(abs, false, cb)
|
||||||
|
|
||||||
|
var lstatkey = 'lstat\0' + abs
|
||||||
|
var self = this
|
||||||
|
var lstatcb = inflight(lstatkey, lstatcb_)
|
||||||
|
|
||||||
|
if (lstatcb)
|
||||||
|
fs.lstat(abs, lstatcb)
|
||||||
|
|
||||||
|
function lstatcb_ (er, lstat) {
|
||||||
|
if (er)
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
var isSym = lstat.isSymbolicLink()
|
||||||
|
self.symlinks[abs] = isSym
|
||||||
|
|
||||||
|
// If it's not a symlink or a dir, then it's definitely a regular file.
|
||||||
|
// don't bother doing a readdir in that case.
|
||||||
|
if (!isSym && !lstat.isDirectory()) {
|
||||||
|
self.cache[abs] = 'FILE'
|
||||||
|
cb()
|
||||||
|
} else
|
||||||
|
self._readdir(abs, false, cb)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._readdir = function (abs, inGlobStar, cb) {
|
||||||
|
if (this.aborted)
|
||||||
|
return
|
||||||
|
|
||||||
|
cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb)
|
||||||
|
if (!cb)
|
||||||
|
return
|
||||||
|
|
||||||
|
//console.error('RD %j %j', +inGlobStar, abs)
|
||||||
|
if (inGlobStar && !ownProp(this.symlinks, abs))
|
||||||
|
return this._readdirInGlobStar(abs, cb)
|
||||||
|
|
||||||
|
if (ownProp(this.cache, abs)) {
|
||||||
|
var c = this.cache[abs]
|
||||||
|
if (!c || c === 'FILE')
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
if (Array.isArray(c))
|
||||||
|
return cb(null, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
var self = this
|
||||||
|
fs.readdir(abs, readdirCb(this, abs, cb))
|
||||||
|
}
|
||||||
|
|
||||||
|
function readdirCb (self, abs, cb) {
|
||||||
|
return function (er, entries) {
|
||||||
|
if (er)
|
||||||
|
self._readdirError(abs, er, cb)
|
||||||
|
else
|
||||||
|
self._readdirEntries(abs, entries, cb)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._readdirEntries = function (abs, entries, cb) {
|
||||||
|
if (this.aborted)
|
||||||
|
return
|
||||||
|
|
||||||
|
// if we haven't asked to stat everything, then just
|
||||||
|
// assume that everything in there exists, so we can avoid
|
||||||
|
// having to stat it a second time.
|
||||||
|
if (!this.mark && !this.stat) {
|
||||||
|
for (var i = 0; i < entries.length; i ++) {
|
||||||
|
var e = entries[i]
|
||||||
|
if (abs === '/')
|
||||||
|
e = abs + e
|
||||||
|
else
|
||||||
|
e = abs + '/' + e
|
||||||
|
this.cache[e] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.cache[abs] = entries
|
||||||
|
return cb(null, entries)
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._readdirError = function (f, er, cb) {
|
||||||
|
if (this.aborted)
|
||||||
|
return
|
||||||
|
|
||||||
|
// handle errors, and cache the information
|
||||||
|
switch (er.code) {
|
||||||
|
case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
|
||||||
|
case 'ENOTDIR': // totally normal. means it *does* exist.
|
||||||
|
this.cache[this._makeAbs(f)] = 'FILE'
|
||||||
|
if (f === this.cwd) {
|
||||||
|
var error = new Error(er.code + ' invalid cwd ' + f)
|
||||||
|
error.path = f
|
||||||
|
error.code = er.code
|
||||||
|
this.emit('error', error)
|
||||||
|
this.abort()
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'ENOENT': // not terribly unusual
|
||||||
|
case 'ELOOP':
|
||||||
|
case 'ENAMETOOLONG':
|
||||||
|
case 'UNKNOWN':
|
||||||
|
this.cache[this._makeAbs(f)] = false
|
||||||
|
break
|
||||||
|
|
||||||
|
default: // some unusual error. Treat as failure.
|
||||||
|
this.cache[this._makeAbs(f)] = false
|
||||||
|
if (this.strict) {
|
||||||
|
this.emit('error', er)
|
||||||
|
// If the error is handled, then we abort
|
||||||
|
// if not, we threw out of here
|
||||||
|
this.abort()
|
||||||
|
}
|
||||||
|
if (!this.silent)
|
||||||
|
console.error('glob error', er)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
return cb()
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {
|
||||||
|
var self = this
|
||||||
|
this._readdir(abs, inGlobStar, function (er, entries) {
|
||||||
|
self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
|
||||||
|
//console.error('pgs2', prefix, remain[0], entries)
|
||||||
|
|
||||||
|
// no entries means not a dir, so it can never have matches
|
||||||
|
// foo.txt/** doesn't match foo.txt
|
||||||
|
if (!entries)
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
// test without the globstar, and with every child both below
|
||||||
|
// and replacing the globstar.
|
||||||
|
var remainWithoutGlobStar = remain.slice(1)
|
||||||
|
var gspref = prefix ? [ prefix ] : []
|
||||||
|
var noGlobStar = gspref.concat(remainWithoutGlobStar)
|
||||||
|
|
||||||
|
// the noGlobStar pattern exits the inGlobStar state
|
||||||
|
this._process(noGlobStar, index, false, cb)
|
||||||
|
|
||||||
|
var isSym = this.symlinks[abs]
|
||||||
|
var len = entries.length
|
||||||
|
|
||||||
|
// If it's a symlink, and we're in a globstar, then stop
|
||||||
|
if (isSym && inGlobStar)
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
for (var i = 0; i < len; i++) {
|
||||||
|
var e = entries[i]
|
||||||
|
if (e.charAt(0) === '.' && !this.dot)
|
||||||
|
continue
|
||||||
|
|
||||||
|
// these two cases enter the inGlobStar state
|
||||||
|
var instead = gspref.concat(entries[i], remainWithoutGlobStar)
|
||||||
|
this._process(instead, index, true, cb)
|
||||||
|
|
||||||
|
var below = gspref.concat(entries[i], remain)
|
||||||
|
this._process(below, index, true, cb)
|
||||||
|
}
|
||||||
|
|
||||||
|
cb()
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._processSimple = function (prefix, index, cb) {
|
||||||
|
// XXX review this. Shouldn't it be doing the mounting etc
|
||||||
|
// before doing stat? kinda weird?
|
||||||
|
var self = this
|
||||||
|
this._stat(prefix, function (er, exists) {
|
||||||
|
self._processSimple2(prefix, index, er, exists, cb)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {
|
||||||
|
|
||||||
|
//console.error('ps2', prefix, exists)
|
||||||
|
|
||||||
|
if (!this.matches[index])
|
||||||
|
this.matches[index] = Object.create(null)
|
||||||
|
|
||||||
|
// If it doesn't exist, then just mark the lack of results
|
||||||
|
if (!exists)
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
if (prefix && isAbsolute(prefix) && !this.nomount) {
|
||||||
|
var trail = /[\/\\]$/.test(prefix)
|
||||||
|
if (prefix.charAt(0) === '/') {
|
||||||
|
prefix = path.join(this.root, prefix)
|
||||||
|
} else {
|
||||||
|
prefix = path.resolve(this.root, prefix)
|
||||||
|
if (trail)
|
||||||
|
prefix += '/'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.platform === 'win32')
|
||||||
|
prefix = prefix.replace(/\\/g, '/')
|
||||||
|
|
||||||
|
// Mark this as a match
|
||||||
|
this._emitMatch(index, prefix)
|
||||||
|
cb()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns either 'DIR', 'FILE', or false
|
||||||
|
Glob.prototype._stat = function (f, cb) {
|
||||||
|
var abs = this._makeAbs(f)
|
||||||
|
var needDir = f.slice(-1) === '/'
|
||||||
|
|
||||||
|
if (f.length > this.maxLength)
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
if (!this.stat && ownProp(this.cache, abs)) {
|
||||||
|
var c = this.cache[abs]
|
||||||
|
|
||||||
|
if (Array.isArray(c))
|
||||||
|
c = 'DIR'
|
||||||
|
|
||||||
|
// It exists, but maybe not how we need it
|
||||||
|
if (!needDir || c === 'DIR')
|
||||||
|
return cb(null, c)
|
||||||
|
|
||||||
|
if (needDir && c === 'FILE')
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
// otherwise we have to stat, because maybe c=true
|
||||||
|
// if we know it exists, but not what it is.
|
||||||
|
}
|
||||||
|
|
||||||
|
var exists
|
||||||
|
var stat = this.statCache[abs]
|
||||||
|
if (stat !== undefined) {
|
||||||
|
if (stat === false)
|
||||||
|
return cb(null, stat)
|
||||||
|
else {
|
||||||
|
var type = stat.isDirectory() ? 'DIR' : 'FILE'
|
||||||
|
if (needDir && type === 'FILE')
|
||||||
|
return cb()
|
||||||
|
else
|
||||||
|
return cb(null, type, stat)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var self = this
|
||||||
|
var statcb = inflight('stat\0' + abs, lstatcb_)
|
||||||
|
if (statcb)
|
||||||
|
fs.lstat(abs, statcb)
|
||||||
|
|
||||||
|
function lstatcb_ (er, lstat) {
|
||||||
|
if (lstat && lstat.isSymbolicLink()) {
|
||||||
|
// If it's a symlink, then treat it as the target, unless
|
||||||
|
// the target does not exist, then treat it as a file.
|
||||||
|
return fs.stat(abs, function (er, stat) {
|
||||||
|
if (er)
|
||||||
|
self._stat2(f, abs, null, lstat, cb)
|
||||||
|
else
|
||||||
|
self._stat2(f, abs, er, stat, cb)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
self._stat2(f, abs, er, lstat, cb)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
|
||||||
|
if (er) {
|
||||||
|
this.statCache[abs] = false
|
||||||
|
return cb()
|
||||||
|
}
|
||||||
|
|
||||||
|
var needDir = f.slice(-1) === '/'
|
||||||
|
this.statCache[abs] = stat
|
||||||
|
|
||||||
|
if (abs.slice(-1) === '/' && !stat.isDirectory())
|
||||||
|
return cb(null, false, stat)
|
||||||
|
|
||||||
|
var c = stat.isDirectory() ? 'DIR' : 'FILE'
|
||||||
|
this.cache[abs] = this.cache[abs] || c
|
||||||
|
|
||||||
|
if (needDir && c !== 'DIR')
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
return cb(null, c, stat)
|
||||||
|
}
|
102
src/node_modules/fs-extra/node_modules/glob/package.json
generated
vendored
Normal file
102
src/node_modules/fs-extra/node_modules/glob/package.json
generated
vendored
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"glob@^7.0.0",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/fs-extra/node_modules/rimraf"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "glob@>=7.0.0 <8.0.0",
|
||||||
|
"_id": "glob@7.0.0",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/fs-extra/glob",
|
||||||
|
"_nodeVersion": "4.0.0",
|
||||||
|
"_npmOperationalInternal": {
|
||||||
|
"host": "packages-5-east.internal.npmjs.com",
|
||||||
|
"tmp": "tmp/glob-7.0.0.tgz_1455132435010_0.6941273615229875"
|
||||||
|
},
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "i@izs.me",
|
||||||
|
"name": "isaacs"
|
||||||
|
},
|
||||||
|
"_npmVersion": "3.7.0",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "glob",
|
||||||
|
"raw": "glob@^7.0.0",
|
||||||
|
"rawSpec": "^7.0.0",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=7.0.0 <8.0.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/fs-extra/rimraf"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/glob/-/glob-7.0.0.tgz",
|
||||||
|
"_shasum": "3b20a357fffcf46bb384aed6f8ae9a647fdb6ac4",
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "glob@^7.0.0",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/fs-extra/node_modules/rimraf",
|
||||||
|
"author": {
|
||||||
|
"email": "i@izs.me",
|
||||||
|
"name": "Isaac Z. Schlueter",
|
||||||
|
"url": "http://blog.izs.me/"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/isaacs/node-glob/issues"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"inflight": "^1.0.4",
|
||||||
|
"inherits": "2",
|
||||||
|
"minimatch": "2 || 3",
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"path-is-absolute": "^1.0.0"
|
||||||
|
},
|
||||||
|
"description": "a little globber",
|
||||||
|
"devDependencies": {
|
||||||
|
"mkdirp": "0",
|
||||||
|
"rimraf": "^2.2.8",
|
||||||
|
"tap": "^5.0.0",
|
||||||
|
"tick": "0.0.6"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "3b20a357fffcf46bb384aed6f8ae9a647fdb6ac4",
|
||||||
|
"tarball": "http://registry.npmjs.org/glob/-/glob-7.0.0.tgz"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"glob.js",
|
||||||
|
"sync.js",
|
||||||
|
"common.js"
|
||||||
|
],
|
||||||
|
"gitHead": "8e8876f84232783fd2db3182af5fa33cc83f1989",
|
||||||
|
"homepage": "https://github.com/isaacs/node-glob#readme",
|
||||||
|
"license": "ISC",
|
||||||
|
"main": "glob.js",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "i@izs.me",
|
||||||
|
"name": "isaacs"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "glob",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/isaacs/node-glob.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"bench": "bash benchmark.sh",
|
||||||
|
"benchclean": "node benchclean.js",
|
||||||
|
"prepublish": "npm run benchclean",
|
||||||
|
"prof": "bash prof.sh && cat profile.txt",
|
||||||
|
"profclean": "rm -f v8.log profile.txt",
|
||||||
|
"test": "tap test/*.js --cov",
|
||||||
|
"test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js"
|
||||||
|
},
|
||||||
|
"version": "7.0.0"
|
||||||
|
}
|
466
src/node_modules/fs-extra/node_modules/glob/sync.js
generated
vendored
Normal file
466
src/node_modules/fs-extra/node_modules/glob/sync.js
generated
vendored
Normal file
@ -0,0 +1,466 @@
|
|||||||
|
module.exports = globSync
|
||||||
|
globSync.GlobSync = GlobSync
|
||||||
|
|
||||||
|
var fs = require('fs')
|
||||||
|
var minimatch = require('minimatch')
|
||||||
|
var Minimatch = minimatch.Minimatch
|
||||||
|
var Glob = require('./glob.js').Glob
|
||||||
|
var util = require('util')
|
||||||
|
var path = require('path')
|
||||||
|
var assert = require('assert')
|
||||||
|
var isAbsolute = require('path-is-absolute')
|
||||||
|
var common = require('./common.js')
|
||||||
|
var alphasort = common.alphasort
|
||||||
|
var alphasorti = common.alphasorti
|
||||||
|
var setopts = common.setopts
|
||||||
|
var ownProp = common.ownProp
|
||||||
|
var childrenIgnored = common.childrenIgnored
|
||||||
|
|
||||||
|
function globSync (pattern, options) {
|
||||||
|
if (typeof options === 'function' || arguments.length === 3)
|
||||||
|
throw new TypeError('callback provided to sync glob\n'+
|
||||||
|
'See: https://github.com/isaacs/node-glob/issues/167')
|
||||||
|
|
||||||
|
return new GlobSync(pattern, options).found
|
||||||
|
}
|
||||||
|
|
||||||
|
function GlobSync (pattern, options) {
|
||||||
|
if (!pattern)
|
||||||
|
throw new Error('must provide pattern')
|
||||||
|
|
||||||
|
if (typeof options === 'function' || arguments.length === 3)
|
||||||
|
throw new TypeError('callback provided to sync glob\n'+
|
||||||
|
'See: https://github.com/isaacs/node-glob/issues/167')
|
||||||
|
|
||||||
|
if (!(this instanceof GlobSync))
|
||||||
|
return new GlobSync(pattern, options)
|
||||||
|
|
||||||
|
setopts(this, pattern, options)
|
||||||
|
|
||||||
|
if (this.noprocess)
|
||||||
|
return this
|
||||||
|
|
||||||
|
var n = this.minimatch.set.length
|
||||||
|
this.matches = new Array(n)
|
||||||
|
for (var i = 0; i < n; i ++) {
|
||||||
|
this._process(this.minimatch.set[i], i, false)
|
||||||
|
}
|
||||||
|
this._finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobSync.prototype._finish = function () {
|
||||||
|
assert(this instanceof GlobSync)
|
||||||
|
if (this.realpath) {
|
||||||
|
var self = this
|
||||||
|
this.matches.forEach(function (matchset, index) {
|
||||||
|
var set = self.matches[index] = Object.create(null)
|
||||||
|
for (var p in matchset) {
|
||||||
|
try {
|
||||||
|
p = self._makeAbs(p)
|
||||||
|
var real = fs.realpathSync(p, self.realpathCache)
|
||||||
|
set[real] = true
|
||||||
|
} catch (er) {
|
||||||
|
if (er.syscall === 'stat')
|
||||||
|
set[self._makeAbs(p)] = true
|
||||||
|
else
|
||||||
|
throw er
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
common.finish(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GlobSync.prototype._process = function (pattern, index, inGlobStar) {
|
||||||
|
assert(this instanceof GlobSync)
|
||||||
|
|
||||||
|
// Get the first [n] parts of pattern that are all strings.
|
||||||
|
var n = 0
|
||||||
|
while (typeof pattern[n] === 'string') {
|
||||||
|
n ++
|
||||||
|
}
|
||||||
|
// now n is the index of the first one that is *not* a string.
|
||||||
|
|
||||||
|
// See if there's anything else
|
||||||
|
var prefix
|
||||||
|
switch (n) {
|
||||||
|
// if not, then this is rather simple
|
||||||
|
case pattern.length:
|
||||||
|
this._processSimple(pattern.join('/'), index)
|
||||||
|
return
|
||||||
|
|
||||||
|
case 0:
|
||||||
|
// pattern *starts* with some non-trivial item.
|
||||||
|
// going to readdir(cwd), but not include the prefix in matches.
|
||||||
|
prefix = null
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
// pattern has some string bits in the front.
|
||||||
|
// whatever it starts with, whether that's 'absolute' like /foo/bar,
|
||||||
|
// or 'relative' like '../baz'
|
||||||
|
prefix = pattern.slice(0, n).join('/')
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
var remain = pattern.slice(n)
|
||||||
|
|
||||||
|
// get the list of entries.
|
||||||
|
var read
|
||||||
|
if (prefix === null)
|
||||||
|
read = '.'
|
||||||
|
else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
|
||||||
|
if (!prefix || !isAbsolute(prefix))
|
||||||
|
prefix = '/' + prefix
|
||||||
|
read = prefix
|
||||||
|
} else
|
||||||
|
read = prefix
|
||||||
|
|
||||||
|
var abs = this._makeAbs(read)
|
||||||
|
|
||||||
|
//if ignored, skip processing
|
||||||
|
if (childrenIgnored(this, read))
|
||||||
|
return
|
||||||
|
|
||||||
|
var isGlobStar = remain[0] === minimatch.GLOBSTAR
|
||||||
|
if (isGlobStar)
|
||||||
|
this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)
|
||||||
|
else
|
||||||
|
this._processReaddir(prefix, read, abs, remain, index, inGlobStar)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {
|
||||||
|
var entries = this._readdir(abs, inGlobStar)
|
||||||
|
|
||||||
|
// if the abs isn't a dir, then nothing can match!
|
||||||
|
if (!entries)
|
||||||
|
return
|
||||||
|
|
||||||
|
// It will only match dot entries if it starts with a dot, or if
|
||||||
|
// dot is set. Stuff like @(.foo|.bar) isn't allowed.
|
||||||
|
var pn = remain[0]
|
||||||
|
var negate = !!this.minimatch.negate
|
||||||
|
var rawGlob = pn._glob
|
||||||
|
var dotOk = this.dot || rawGlob.charAt(0) === '.'
|
||||||
|
|
||||||
|
var matchedEntries = []
|
||||||
|
for (var i = 0; i < entries.length; i++) {
|
||||||
|
var e = entries[i]
|
||||||
|
if (e.charAt(0) !== '.' || dotOk) {
|
||||||
|
var m
|
||||||
|
if (negate && !prefix) {
|
||||||
|
m = !e.match(pn)
|
||||||
|
} else {
|
||||||
|
m = e.match(pn)
|
||||||
|
}
|
||||||
|
if (m)
|
||||||
|
matchedEntries.push(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var len = matchedEntries.length
|
||||||
|
// If there are no matched entries, then nothing matches.
|
||||||
|
if (len === 0)
|
||||||
|
return
|
||||||
|
|
||||||
|
// if this is the last remaining pattern bit, then no need for
|
||||||
|
// an additional stat *unless* the user has specified mark or
|
||||||
|
// stat explicitly. We know they exist, since readdir returned
|
||||||
|
// them.
|
||||||
|
|
||||||
|
if (remain.length === 1 && !this.mark && !this.stat) {
|
||||||
|
if (!this.matches[index])
|
||||||
|
this.matches[index] = Object.create(null)
|
||||||
|
|
||||||
|
for (var i = 0; i < len; i ++) {
|
||||||
|
var e = matchedEntries[i]
|
||||||
|
if (prefix) {
|
||||||
|
if (prefix.slice(-1) !== '/')
|
||||||
|
e = prefix + '/' + e
|
||||||
|
else
|
||||||
|
e = prefix + e
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.charAt(0) === '/' && !this.nomount) {
|
||||||
|
e = path.join(this.root, e)
|
||||||
|
}
|
||||||
|
this.matches[index][e] = true
|
||||||
|
}
|
||||||
|
// This was the last one, and no stats were needed
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// now test all matched entries as stand-ins for that part
|
||||||
|
// of the pattern.
|
||||||
|
remain.shift()
|
||||||
|
for (var i = 0; i < len; i ++) {
|
||||||
|
var e = matchedEntries[i]
|
||||||
|
var newPattern
|
||||||
|
if (prefix)
|
||||||
|
newPattern = [prefix, e]
|
||||||
|
else
|
||||||
|
newPattern = [e]
|
||||||
|
this._process(newPattern.concat(remain), index, inGlobStar)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GlobSync.prototype._emitMatch = function (index, e) {
|
||||||
|
var abs = this._makeAbs(e)
|
||||||
|
if (this.mark)
|
||||||
|
e = this._mark(e)
|
||||||
|
|
||||||
|
if (this.matches[index][e])
|
||||||
|
return
|
||||||
|
|
||||||
|
if (this.nodir) {
|
||||||
|
var c = this.cache[this._makeAbs(e)]
|
||||||
|
if (c === 'DIR' || Array.isArray(c))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.matches[index][e] = true
|
||||||
|
if (this.stat)
|
||||||
|
this._stat(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GlobSync.prototype._readdirInGlobStar = function (abs) {
|
||||||
|
// follow all symlinked directories forever
|
||||||
|
// just proceed as if this is a non-globstar situation
|
||||||
|
if (this.follow)
|
||||||
|
return this._readdir(abs, false)
|
||||||
|
|
||||||
|
var entries
|
||||||
|
var lstat
|
||||||
|
var stat
|
||||||
|
try {
|
||||||
|
lstat = fs.lstatSync(abs)
|
||||||
|
} catch (er) {
|
||||||
|
// lstat failed, doesn't exist
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
var isSym = lstat.isSymbolicLink()
|
||||||
|
this.symlinks[abs] = isSym
|
||||||
|
|
||||||
|
// If it's not a symlink or a dir, then it's definitely a regular file.
|
||||||
|
// don't bother doing a readdir in that case.
|
||||||
|
if (!isSym && !lstat.isDirectory())
|
||||||
|
this.cache[abs] = 'FILE'
|
||||||
|
else
|
||||||
|
entries = this._readdir(abs, false)
|
||||||
|
|
||||||
|
return entries
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobSync.prototype._readdir = function (abs, inGlobStar) {
|
||||||
|
var entries
|
||||||
|
|
||||||
|
if (inGlobStar && !ownProp(this.symlinks, abs))
|
||||||
|
return this._readdirInGlobStar(abs)
|
||||||
|
|
||||||
|
if (ownProp(this.cache, abs)) {
|
||||||
|
var c = this.cache[abs]
|
||||||
|
if (!c || c === 'FILE')
|
||||||
|
return null
|
||||||
|
|
||||||
|
if (Array.isArray(c))
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return this._readdirEntries(abs, fs.readdirSync(abs))
|
||||||
|
} catch (er) {
|
||||||
|
this._readdirError(abs, er)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobSync.prototype._readdirEntries = function (abs, entries) {
|
||||||
|
// if we haven't asked to stat everything, then just
|
||||||
|
// assume that everything in there exists, so we can avoid
|
||||||
|
// having to stat it a second time.
|
||||||
|
if (!this.mark && !this.stat) {
|
||||||
|
for (var i = 0; i < entries.length; i ++) {
|
||||||
|
var e = entries[i]
|
||||||
|
if (abs === '/')
|
||||||
|
e = abs + e
|
||||||
|
else
|
||||||
|
e = abs + '/' + e
|
||||||
|
this.cache[e] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.cache[abs] = entries
|
||||||
|
|
||||||
|
// mark and cache dir-ness
|
||||||
|
return entries
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobSync.prototype._readdirError = function (f, er) {
|
||||||
|
// handle errors, and cache the information
|
||||||
|
switch (er.code) {
|
||||||
|
case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
|
||||||
|
case 'ENOTDIR': // totally normal. means it *does* exist.
|
||||||
|
this.cache[this._makeAbs(f)] = 'FILE'
|
||||||
|
if (f === this.cwd) {
|
||||||
|
var error = new Error(er.code + ' invalid cwd ' + f)
|
||||||
|
error.path = f
|
||||||
|
error.code = er.code
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'ENOENT': // not terribly unusual
|
||||||
|
case 'ELOOP':
|
||||||
|
case 'ENAMETOOLONG':
|
||||||
|
case 'UNKNOWN':
|
||||||
|
this.cache[this._makeAbs(f)] = false
|
||||||
|
break
|
||||||
|
|
||||||
|
default: // some unusual error. Treat as failure.
|
||||||
|
this.cache[this._makeAbs(f)] = false
|
||||||
|
if (this.strict)
|
||||||
|
throw er
|
||||||
|
if (!this.silent)
|
||||||
|
console.error('glob error', er)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {
|
||||||
|
|
||||||
|
var entries = this._readdir(abs, inGlobStar)
|
||||||
|
|
||||||
|
// no entries means not a dir, so it can never have matches
|
||||||
|
// foo.txt/** doesn't match foo.txt
|
||||||
|
if (!entries)
|
||||||
|
return
|
||||||
|
|
||||||
|
// test without the globstar, and with every child both below
|
||||||
|
// and replacing the globstar.
|
||||||
|
var remainWithoutGlobStar = remain.slice(1)
|
||||||
|
var gspref = prefix ? [ prefix ] : []
|
||||||
|
var noGlobStar = gspref.concat(remainWithoutGlobStar)
|
||||||
|
|
||||||
|
// the noGlobStar pattern exits the inGlobStar state
|
||||||
|
this._process(noGlobStar, index, false)
|
||||||
|
|
||||||
|
var len = entries.length
|
||||||
|
var isSym = this.symlinks[abs]
|
||||||
|
|
||||||
|
// If it's a symlink, and we're in a globstar, then stop
|
||||||
|
if (isSym && inGlobStar)
|
||||||
|
return
|
||||||
|
|
||||||
|
for (var i = 0; i < len; i++) {
|
||||||
|
var e = entries[i]
|
||||||
|
if (e.charAt(0) === '.' && !this.dot)
|
||||||
|
continue
|
||||||
|
|
||||||
|
// these two cases enter the inGlobStar state
|
||||||
|
var instead = gspref.concat(entries[i], remainWithoutGlobStar)
|
||||||
|
this._process(instead, index, true)
|
||||||
|
|
||||||
|
var below = gspref.concat(entries[i], remain)
|
||||||
|
this._process(below, index, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobSync.prototype._processSimple = function (prefix, index) {
|
||||||
|
// XXX review this. Shouldn't it be doing the mounting etc
|
||||||
|
// before doing stat? kinda weird?
|
||||||
|
var exists = this._stat(prefix)
|
||||||
|
|
||||||
|
if (!this.matches[index])
|
||||||
|
this.matches[index] = Object.create(null)
|
||||||
|
|
||||||
|
// If it doesn't exist, then just mark the lack of results
|
||||||
|
if (!exists)
|
||||||
|
return
|
||||||
|
|
||||||
|
if (prefix && isAbsolute(prefix) && !this.nomount) {
|
||||||
|
var trail = /[\/\\]$/.test(prefix)
|
||||||
|
if (prefix.charAt(0) === '/') {
|
||||||
|
prefix = path.join(this.root, prefix)
|
||||||
|
} else {
|
||||||
|
prefix = path.resolve(this.root, prefix)
|
||||||
|
if (trail)
|
||||||
|
prefix += '/'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.platform === 'win32')
|
||||||
|
prefix = prefix.replace(/\\/g, '/')
|
||||||
|
|
||||||
|
// Mark this as a match
|
||||||
|
this.matches[index][prefix] = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns either 'DIR', 'FILE', or false
|
||||||
|
GlobSync.prototype._stat = function (f) {
|
||||||
|
var abs = this._makeAbs(f)
|
||||||
|
var needDir = f.slice(-1) === '/'
|
||||||
|
|
||||||
|
if (f.length > this.maxLength)
|
||||||
|
return false
|
||||||
|
|
||||||
|
if (!this.stat && ownProp(this.cache, abs)) {
|
||||||
|
var c = this.cache[abs]
|
||||||
|
|
||||||
|
if (Array.isArray(c))
|
||||||
|
c = 'DIR'
|
||||||
|
|
||||||
|
// It exists, but maybe not how we need it
|
||||||
|
if (!needDir || c === 'DIR')
|
||||||
|
return c
|
||||||
|
|
||||||
|
if (needDir && c === 'FILE')
|
||||||
|
return false
|
||||||
|
|
||||||
|
// otherwise we have to stat, because maybe c=true
|
||||||
|
// if we know it exists, but not what it is.
|
||||||
|
}
|
||||||
|
|
||||||
|
var exists
|
||||||
|
var stat = this.statCache[abs]
|
||||||
|
if (!stat) {
|
||||||
|
var lstat
|
||||||
|
try {
|
||||||
|
lstat = fs.lstatSync(abs)
|
||||||
|
} catch (er) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lstat.isSymbolicLink()) {
|
||||||
|
try {
|
||||||
|
stat = fs.statSync(abs)
|
||||||
|
} catch (er) {
|
||||||
|
stat = lstat
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
stat = lstat
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.statCache[abs] = stat
|
||||||
|
|
||||||
|
var c = stat.isDirectory() ? 'DIR' : 'FILE'
|
||||||
|
this.cache[abs] = this.cache[abs] || c
|
||||||
|
|
||||||
|
if (needDir && c !== 'DIR')
|
||||||
|
return false
|
||||||
|
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobSync.prototype._mark = function (p) {
|
||||||
|
return common.mark(this, p)
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobSync.prototype._makeAbs = function (f) {
|
||||||
|
return common.makeAbs(this, f)
|
||||||
|
}
|
15
src/node_modules/fs-extra/node_modules/rimraf/LICENSE
generated
vendored
Normal file
15
src/node_modules/fs-extra/node_modules/rimraf/LICENSE
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
The ISC License
|
||||||
|
|
||||||
|
Copyright (c) Isaac Z. Schlueter and Contributors
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
|
copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
||||||
|
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
101
src/node_modules/fs-extra/node_modules/rimraf/README.md
generated
vendored
Normal file
101
src/node_modules/fs-extra/node_modules/rimraf/README.md
generated
vendored
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
[![Build Status](https://travis-ci.org/isaacs/rimraf.svg?branch=master)](https://travis-ci.org/isaacs/rimraf) [![Dependency Status](https://david-dm.org/isaacs/rimraf.svg)](https://david-dm.org/isaacs/rimraf) [![devDependency Status](https://david-dm.org/isaacs/rimraf/dev-status.svg)](https://david-dm.org/isaacs/rimraf#info=devDependencies)
|
||||||
|
|
||||||
|
The [UNIX command](http://en.wikipedia.org/wiki/Rm_(Unix)) `rm -rf` for node.
|
||||||
|
|
||||||
|
Install with `npm install rimraf`, or just drop rimraf.js somewhere.
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
`rimraf(f, [opts], callback)`
|
||||||
|
|
||||||
|
The first parameter will be interpreted as a globbing pattern for files. If you
|
||||||
|
want to disable globbing you can do so with `opts.disableGlob` (defaults to
|
||||||
|
`false`). This might be handy, for instance, if you have filenames that contain
|
||||||
|
globbing wildcard characters.
|
||||||
|
|
||||||
|
The callback will be called with an error if there is one. Certain
|
||||||
|
errors are handled for you:
|
||||||
|
|
||||||
|
* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of
|
||||||
|
`opts.maxBusyTries` times before giving up, adding 100ms of wait
|
||||||
|
between each attempt. The default `maxBusyTries` is 3.
|
||||||
|
* `ENOENT` - If the file doesn't exist, rimraf will return
|
||||||
|
successfully, since your desired outcome is already the case.
|
||||||
|
* `EMFILE` - Since `readdir` requires opening a file descriptor, it's
|
||||||
|
possible to hit `EMFILE` if too many file descriptors are in use.
|
||||||
|
In the sync case, there's nothing to be done for this. But in the
|
||||||
|
async case, rimraf will gradually back off with timeouts up to
|
||||||
|
`opts.emfileWait` ms, which defaults to 1000.
|
||||||
|
|
||||||
|
## options
|
||||||
|
|
||||||
|
* unlink, chmod, stat, lstat, rmdir, readdir,
|
||||||
|
unlinkSync, chmodSync, statSync, lstatSync, rmdirSync, readdirSync
|
||||||
|
|
||||||
|
In order to use a custom file system library, you can override
|
||||||
|
specific fs functions on the options object.
|
||||||
|
|
||||||
|
If any of these functions are present on the options object, then
|
||||||
|
the supplied function will be used instead of the default fs
|
||||||
|
method.
|
||||||
|
|
||||||
|
Sync methods are only relevant for `rimraf.sync()`, of course.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var myCustomFS = require('some-custom-fs')
|
||||||
|
|
||||||
|
rimraf('some-thing', myCustomFS, callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
* maxBusyTries
|
||||||
|
|
||||||
|
If an `EBUSY`, `ENOTEMPTY`, or `EPERM` error code is encountered
|
||||||
|
on Windows systems, then rimraf will retry with a linear backoff
|
||||||
|
wait of 100ms longer on each try. The default maxBusyTries is 3.
|
||||||
|
|
||||||
|
Only relevant for async usage.
|
||||||
|
|
||||||
|
* emfileWait
|
||||||
|
|
||||||
|
If an `EMFILE` error is encountered, then rimraf will retry
|
||||||
|
repeatedly with a linear backoff of 1ms longer on each try, until
|
||||||
|
the timeout counter hits this max. The default limit is 1000.
|
||||||
|
|
||||||
|
If you repeatedly encounter `EMFILE` errors, then consider using
|
||||||
|
[graceful-fs](http://npm.im/graceful-fs) in your program.
|
||||||
|
|
||||||
|
Only relevant for async usage.
|
||||||
|
|
||||||
|
* glob
|
||||||
|
|
||||||
|
Set to `false` to disable [glob](http://npm.im/glob) pattern
|
||||||
|
matching.
|
||||||
|
|
||||||
|
Set to an object to pass options to the glob module. The default
|
||||||
|
glob options are `{ nosort: true, silent: true }`.
|
||||||
|
|
||||||
|
Glob version 6 is used in this module.
|
||||||
|
|
||||||
|
Relevant for both sync and async usage.
|
||||||
|
|
||||||
|
* disableGlob
|
||||||
|
|
||||||
|
Set to any non-falsey value to disable globbing entirely.
|
||||||
|
(Equivalent to setting `glob: false`.)
|
||||||
|
|
||||||
|
## rimraf.sync
|
||||||
|
|
||||||
|
It can remove stuff synchronously, too. But that's not so good. Use
|
||||||
|
the async API. It's better.
|
||||||
|
|
||||||
|
## CLI
|
||||||
|
|
||||||
|
If installed with `npm install rimraf -g` it can be used as a global
|
||||||
|
command `rimraf <path> [<path> ...]` which is useful for cross platform support.
|
||||||
|
|
||||||
|
## mkdirp
|
||||||
|
|
||||||
|
If you need to create a directory recursively, check out
|
||||||
|
[mkdirp](https://github.com/substack/node-mkdirp).
|
40
src/node_modules/fs-extra/node_modules/rimraf/bin.js
generated
vendored
Executable file
40
src/node_modules/fs-extra/node_modules/rimraf/bin.js
generated
vendored
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
var rimraf = require('./')
|
||||||
|
|
||||||
|
var help = false
|
||||||
|
var dashdash = false
|
||||||
|
var args = process.argv.slice(2).filter(function(arg) {
|
||||||
|
if (dashdash)
|
||||||
|
return !!arg
|
||||||
|
else if (arg === '--')
|
||||||
|
dashdash = true
|
||||||
|
else if (arg.match(/^(-+|\/)(h(elp)?|\?)$/))
|
||||||
|
help = true
|
||||||
|
else
|
||||||
|
return !!arg
|
||||||
|
});
|
||||||
|
|
||||||
|
if (help || args.length === 0) {
|
||||||
|
// If they didn't ask for help, then this is not a "success"
|
||||||
|
var log = help ? console.log : console.error
|
||||||
|
log('Usage: rimraf <path> [<path> ...]')
|
||||||
|
log('')
|
||||||
|
log(' Deletes all files and folders at "path" recursively.')
|
||||||
|
log('')
|
||||||
|
log('Options:')
|
||||||
|
log('')
|
||||||
|
log(' -h, --help Display this usage info')
|
||||||
|
process.exit(help ? 0 : 1)
|
||||||
|
} else
|
||||||
|
go(0)
|
||||||
|
|
||||||
|
function go (n) {
|
||||||
|
if (n >= args.length)
|
||||||
|
return
|
||||||
|
rimraf(args[n], function (er) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
go(n+1)
|
||||||
|
})
|
||||||
|
}
|
91
src/node_modules/fs-extra/node_modules/rimraf/package.json
generated
vendored
Normal file
91
src/node_modules/fs-extra/node_modules/rimraf/package.json
generated
vendored
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"rimraf@^2.2.8",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/fs-extra"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "rimraf@>=2.2.8 <3.0.0",
|
||||||
|
"_id": "rimraf@2.5.2",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/fs-extra/rimraf",
|
||||||
|
"_nodeVersion": "5.6.0",
|
||||||
|
"_npmOperationalInternal": {
|
||||||
|
"host": "packages-6-west.internal.npmjs.com",
|
||||||
|
"tmp": "tmp/rimraf-2.5.2.tgz_1455346499772_0.9326622514054179"
|
||||||
|
},
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "i@izs.me",
|
||||||
|
"name": "isaacs"
|
||||||
|
},
|
||||||
|
"_npmVersion": "3.7.0",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "rimraf",
|
||||||
|
"raw": "rimraf@^2.2.8",
|
||||||
|
"rawSpec": "^2.2.8",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=2.2.8 <3.0.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/fs-extra"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.2.tgz",
|
||||||
|
"_shasum": "62ba947fa4c0b4363839aefecd4f0fbad6059726",
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "rimraf@^2.2.8",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/fs-extra",
|
||||||
|
"author": {
|
||||||
|
"email": "i@izs.me",
|
||||||
|
"name": "Isaac Z. Schlueter",
|
||||||
|
"url": "http://blog.izs.me/"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"rimraf": "./bin.js"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/isaacs/rimraf/issues"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"glob": "^7.0.0"
|
||||||
|
},
|
||||||
|
"description": "A deep deletion module for node (like `rm -rf`)",
|
||||||
|
"devDependencies": {
|
||||||
|
"mkdirp": "^0.5.1",
|
||||||
|
"tap": "^5.1.1"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "62ba947fa4c0b4363839aefecd4f0fbad6059726",
|
||||||
|
"tarball": "http://registry.npmjs.org/rimraf/-/rimraf-2.5.2.tgz"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"LICENSE",
|
||||||
|
"README.md",
|
||||||
|
"bin.js",
|
||||||
|
"rimraf.js"
|
||||||
|
],
|
||||||
|
"gitHead": "f414f87021f88d004ac487eebc8d07ce6a152721",
|
||||||
|
"homepage": "https://github.com/isaacs/rimraf#readme",
|
||||||
|
"license": "ISC",
|
||||||
|
"main": "rimraf.js",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "i@izs.me",
|
||||||
|
"name": "isaacs"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "rimraf",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/isaacs/rimraf.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "tap test/*.js"
|
||||||
|
},
|
||||||
|
"version": "2.5.2"
|
||||||
|
}
|
335
src/node_modules/fs-extra/node_modules/rimraf/rimraf.js
generated
vendored
Normal file
335
src/node_modules/fs-extra/node_modules/rimraf/rimraf.js
generated
vendored
Normal file
@ -0,0 +1,335 @@
|
|||||||
|
module.exports = rimraf
|
||||||
|
rimraf.sync = rimrafSync
|
||||||
|
|
||||||
|
var assert = require("assert")
|
||||||
|
var path = require("path")
|
||||||
|
var fs = require("fs")
|
||||||
|
var glob = require("glob")
|
||||||
|
|
||||||
|
var defaultGlobOpts = {
|
||||||
|
nosort: true,
|
||||||
|
silent: true
|
||||||
|
}
|
||||||
|
|
||||||
|
// for EMFILE handling
|
||||||
|
var timeout = 0
|
||||||
|
|
||||||
|
var isWindows = (process.platform === "win32")
|
||||||
|
|
||||||
|
function defaults (options) {
|
||||||
|
var methods = [
|
||||||
|
'unlink',
|
||||||
|
'chmod',
|
||||||
|
'stat',
|
||||||
|
'lstat',
|
||||||
|
'rmdir',
|
||||||
|
'readdir'
|
||||||
|
]
|
||||||
|
methods.forEach(function(m) {
|
||||||
|
options[m] = options[m] || fs[m]
|
||||||
|
m = m + 'Sync'
|
||||||
|
options[m] = options[m] || fs[m]
|
||||||
|
})
|
||||||
|
|
||||||
|
options.maxBusyTries = options.maxBusyTries || 3
|
||||||
|
options.emfileWait = options.emfileWait || 1000
|
||||||
|
if (options.glob === false) {
|
||||||
|
options.disableGlob = true
|
||||||
|
}
|
||||||
|
options.disableGlob = options.disableGlob || false
|
||||||
|
options.glob = options.glob || defaultGlobOpts
|
||||||
|
}
|
||||||
|
|
||||||
|
function rimraf (p, options, cb) {
|
||||||
|
if (typeof options === 'function') {
|
||||||
|
cb = options
|
||||||
|
options = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(p, 'rimraf: missing path')
|
||||||
|
assert.equal(typeof p, 'string', 'rimraf: path should be a string')
|
||||||
|
assert(options, 'rimraf: missing options')
|
||||||
|
assert.equal(typeof options, 'object', 'rimraf: options should be object')
|
||||||
|
assert.equal(typeof cb, 'function', 'rimraf: callback function required')
|
||||||
|
|
||||||
|
defaults(options)
|
||||||
|
|
||||||
|
var busyTries = 0
|
||||||
|
var errState = null
|
||||||
|
var n = 0
|
||||||
|
|
||||||
|
if (options.disableGlob || !glob.hasMagic(p))
|
||||||
|
return afterGlob(null, [p])
|
||||||
|
|
||||||
|
fs.lstat(p, function (er, stat) {
|
||||||
|
if (!er)
|
||||||
|
return afterGlob(null, [p])
|
||||||
|
|
||||||
|
glob(p, options.glob, afterGlob)
|
||||||
|
})
|
||||||
|
|
||||||
|
function next (er) {
|
||||||
|
errState = errState || er
|
||||||
|
if (--n === 0)
|
||||||
|
cb(errState)
|
||||||
|
}
|
||||||
|
|
||||||
|
function afterGlob (er, results) {
|
||||||
|
if (er)
|
||||||
|
return cb(er)
|
||||||
|
|
||||||
|
n = results.length
|
||||||
|
if (n === 0)
|
||||||
|
return cb()
|
||||||
|
|
||||||
|
results.forEach(function (p) {
|
||||||
|
rimraf_(p, options, function CB (er) {
|
||||||
|
if (er) {
|
||||||
|
if (isWindows && (er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") &&
|
||||||
|
busyTries < options.maxBusyTries) {
|
||||||
|
busyTries ++
|
||||||
|
var time = busyTries * 100
|
||||||
|
// try again, with the same exact callback as this one.
|
||||||
|
return setTimeout(function () {
|
||||||
|
rimraf_(p, options, CB)
|
||||||
|
}, time)
|
||||||
|
}
|
||||||
|
|
||||||
|
// this one won't happen if graceful-fs is used.
|
||||||
|
if (er.code === "EMFILE" && timeout < options.emfileWait) {
|
||||||
|
return setTimeout(function () {
|
||||||
|
rimraf_(p, options, CB)
|
||||||
|
}, timeout ++)
|
||||||
|
}
|
||||||
|
|
||||||
|
// already gone
|
||||||
|
if (er.code === "ENOENT") er = null
|
||||||
|
}
|
||||||
|
|
||||||
|
timeout = 0
|
||||||
|
next(er)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Two possible strategies.
|
||||||
|
// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR
|
||||||
|
// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR
|
||||||
|
//
|
||||||
|
// Both result in an extra syscall when you guess wrong. However, there
|
||||||
|
// are likely far more normal files in the world than directories. This
|
||||||
|
// is based on the assumption that a the average number of files per
|
||||||
|
// directory is >= 1.
|
||||||
|
//
|
||||||
|
// If anyone ever complains about this, then I guess the strategy could
|
||||||
|
// be made configurable somehow. But until then, YAGNI.
|
||||||
|
function rimraf_ (p, options, cb) {
|
||||||
|
assert(p)
|
||||||
|
assert(options)
|
||||||
|
assert(typeof cb === 'function')
|
||||||
|
|
||||||
|
// sunos lets the root user unlink directories, which is... weird.
|
||||||
|
// so we have to lstat here and make sure it's not a dir.
|
||||||
|
options.lstat(p, function (er, st) {
|
||||||
|
if (er && er.code === "ENOENT")
|
||||||
|
return cb(null)
|
||||||
|
|
||||||
|
if (st && st.isDirectory())
|
||||||
|
return rmdir(p, options, er, cb)
|
||||||
|
|
||||||
|
options.unlink(p, function (er) {
|
||||||
|
if (er) {
|
||||||
|
if (er.code === "ENOENT")
|
||||||
|
return cb(null)
|
||||||
|
if (er.code === "EPERM")
|
||||||
|
return (isWindows)
|
||||||
|
? fixWinEPERM(p, options, er, cb)
|
||||||
|
: rmdir(p, options, er, cb)
|
||||||
|
if (er.code === "EISDIR")
|
||||||
|
return rmdir(p, options, er, cb)
|
||||||
|
}
|
||||||
|
return cb(er)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function fixWinEPERM (p, options, er, cb) {
|
||||||
|
assert(p)
|
||||||
|
assert(options)
|
||||||
|
assert(typeof cb === 'function')
|
||||||
|
if (er)
|
||||||
|
assert(er instanceof Error)
|
||||||
|
|
||||||
|
options.chmod(p, 666, function (er2) {
|
||||||
|
if (er2)
|
||||||
|
cb(er2.code === "ENOENT" ? null : er)
|
||||||
|
else
|
||||||
|
options.stat(p, function(er3, stats) {
|
||||||
|
if (er3)
|
||||||
|
cb(er3.code === "ENOENT" ? null : er)
|
||||||
|
else if (stats.isDirectory())
|
||||||
|
rmdir(p, options, er, cb)
|
||||||
|
else
|
||||||
|
options.unlink(p, cb)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function fixWinEPERMSync (p, options, er) {
|
||||||
|
assert(p)
|
||||||
|
assert(options)
|
||||||
|
if (er)
|
||||||
|
assert(er instanceof Error)
|
||||||
|
|
||||||
|
try {
|
||||||
|
options.chmodSync(p, 666)
|
||||||
|
} catch (er2) {
|
||||||
|
if (er2.code === "ENOENT")
|
||||||
|
return
|
||||||
|
else
|
||||||
|
throw er
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
var stats = options.statSync(p)
|
||||||
|
} catch (er3) {
|
||||||
|
if (er3.code === "ENOENT")
|
||||||
|
return
|
||||||
|
else
|
||||||
|
throw er
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stats.isDirectory())
|
||||||
|
rmdirSync(p, options, er)
|
||||||
|
else
|
||||||
|
options.unlinkSync(p)
|
||||||
|
}
|
||||||
|
|
||||||
|
function rmdir (p, options, originalEr, cb) {
|
||||||
|
assert(p)
|
||||||
|
assert(options)
|
||||||
|
if (originalEr)
|
||||||
|
assert(originalEr instanceof Error)
|
||||||
|
assert(typeof cb === 'function')
|
||||||
|
|
||||||
|
// try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
|
||||||
|
// if we guessed wrong, and it's not a directory, then
|
||||||
|
// raise the original error.
|
||||||
|
options.rmdir(p, function (er) {
|
||||||
|
if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM"))
|
||||||
|
rmkids(p, options, cb)
|
||||||
|
else if (er && er.code === "ENOTDIR")
|
||||||
|
cb(originalEr)
|
||||||
|
else
|
||||||
|
cb(er)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function rmkids(p, options, cb) {
|
||||||
|
assert(p)
|
||||||
|
assert(options)
|
||||||
|
assert(typeof cb === 'function')
|
||||||
|
|
||||||
|
options.readdir(p, function (er, files) {
|
||||||
|
if (er)
|
||||||
|
return cb(er)
|
||||||
|
var n = files.length
|
||||||
|
if (n === 0)
|
||||||
|
return options.rmdir(p, cb)
|
||||||
|
var errState
|
||||||
|
files.forEach(function (f) {
|
||||||
|
rimraf(path.join(p, f), options, function (er) {
|
||||||
|
if (errState)
|
||||||
|
return
|
||||||
|
if (er)
|
||||||
|
return cb(errState = er)
|
||||||
|
if (--n === 0)
|
||||||
|
options.rmdir(p, cb)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// this looks simpler, and is strictly *faster*, but will
|
||||||
|
// tie up the JavaScript thread and fail on excessively
|
||||||
|
// deep directory trees.
|
||||||
|
function rimrafSync (p, options) {
|
||||||
|
options = options || {}
|
||||||
|
defaults(options)
|
||||||
|
|
||||||
|
assert(p, 'rimraf: missing path')
|
||||||
|
assert.equal(typeof p, 'string', 'rimraf: path should be a string')
|
||||||
|
assert(options, 'rimraf: missing options')
|
||||||
|
assert.equal(typeof options, 'object', 'rimraf: options should be object')
|
||||||
|
|
||||||
|
var results
|
||||||
|
|
||||||
|
if (options.disableGlob || !glob.hasMagic(p)) {
|
||||||
|
results = [p]
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
fs.lstatSync(p)
|
||||||
|
results = [p]
|
||||||
|
} catch (er) {
|
||||||
|
results = glob.sync(p, options.glob)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!results.length)
|
||||||
|
return
|
||||||
|
|
||||||
|
for (var i = 0; i < results.length; i++) {
|
||||||
|
var p = results[i]
|
||||||
|
|
||||||
|
try {
|
||||||
|
var st = options.lstatSync(p)
|
||||||
|
} catch (er) {
|
||||||
|
if (er.code === "ENOENT")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// sunos lets the root user unlink directories, which is... weird.
|
||||||
|
if (st && st.isDirectory())
|
||||||
|
rmdirSync(p, options, null)
|
||||||
|
else
|
||||||
|
options.unlinkSync(p)
|
||||||
|
} catch (er) {
|
||||||
|
if (er.code === "ENOENT")
|
||||||
|
return
|
||||||
|
if (er.code === "EPERM")
|
||||||
|
return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
|
||||||
|
if (er.code !== "EISDIR")
|
||||||
|
throw er
|
||||||
|
rmdirSync(p, options, er)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function rmdirSync (p, options, originalEr) {
|
||||||
|
assert(p)
|
||||||
|
assert(options)
|
||||||
|
if (originalEr)
|
||||||
|
assert(originalEr instanceof Error)
|
||||||
|
|
||||||
|
try {
|
||||||
|
options.rmdirSync(p)
|
||||||
|
} catch (er) {
|
||||||
|
if (er.code === "ENOENT")
|
||||||
|
return
|
||||||
|
if (er.code === "ENOTDIR")
|
||||||
|
throw originalEr
|
||||||
|
if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")
|
||||||
|
rmkidsSync(p, options)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function rmkidsSync (p, options) {
|
||||||
|
assert(p)
|
||||||
|
assert(options)
|
||||||
|
options.readdirSync(p).forEach(function (f) {
|
||||||
|
rimrafSync(path.join(p, f), options)
|
||||||
|
})
|
||||||
|
options.rmdirSync(p, options)
|
||||||
|
}
|
24
src/node_modules/insert-module-globals/node_modules/concat-stream/LICENSE
generated
vendored
Normal file
24
src/node_modules/insert-module-globals/node_modules/concat-stream/LICENSE
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2013 Max Ogden
|
||||||
|
|
||||||
|
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.
|
136
src/node_modules/insert-module-globals/node_modules/concat-stream/index.js
generated
vendored
Normal file
136
src/node_modules/insert-module-globals/node_modules/concat-stream/index.js
generated
vendored
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
var Writable = require('readable-stream').Writable
|
||||||
|
var inherits = require('inherits')
|
||||||
|
|
||||||
|
if (typeof Uint8Array === 'undefined') {
|
||||||
|
var U8 = require('typedarray').Uint8Array
|
||||||
|
} else {
|
||||||
|
var U8 = Uint8Array
|
||||||
|
}
|
||||||
|
|
||||||
|
function ConcatStream(opts, cb) {
|
||||||
|
if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb)
|
||||||
|
|
||||||
|
if (typeof opts === 'function') {
|
||||||
|
cb = opts
|
||||||
|
opts = {}
|
||||||
|
}
|
||||||
|
if (!opts) opts = {}
|
||||||
|
|
||||||
|
var encoding = opts.encoding
|
||||||
|
var shouldInferEncoding = false
|
||||||
|
|
||||||
|
if (!encoding) {
|
||||||
|
shouldInferEncoding = true
|
||||||
|
} else {
|
||||||
|
encoding = String(encoding).toLowerCase()
|
||||||
|
if (encoding === 'u8' || encoding === 'uint8') {
|
||||||
|
encoding = 'uint8array'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Writable.call(this, { objectMode: true })
|
||||||
|
|
||||||
|
this.encoding = encoding
|
||||||
|
this.shouldInferEncoding = shouldInferEncoding
|
||||||
|
|
||||||
|
if (cb) this.on('finish', function () { cb(this.getBody()) })
|
||||||
|
this.body = []
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = ConcatStream
|
||||||
|
inherits(ConcatStream, Writable)
|
||||||
|
|
||||||
|
ConcatStream.prototype._write = function(chunk, enc, next) {
|
||||||
|
this.body.push(chunk)
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
ConcatStream.prototype.inferEncoding = function (buff) {
|
||||||
|
var firstBuffer = buff === undefined ? this.body[0] : buff;
|
||||||
|
if (Buffer.isBuffer(firstBuffer)) return 'buffer'
|
||||||
|
if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array'
|
||||||
|
if (Array.isArray(firstBuffer)) return 'array'
|
||||||
|
if (typeof firstBuffer === 'string') return 'string'
|
||||||
|
if (Object.prototype.toString.call(firstBuffer) === "[object Object]") return 'object'
|
||||||
|
return 'buffer'
|
||||||
|
}
|
||||||
|
|
||||||
|
ConcatStream.prototype.getBody = function () {
|
||||||
|
if (!this.encoding && this.body.length === 0) return []
|
||||||
|
if (this.shouldInferEncoding) this.encoding = this.inferEncoding()
|
||||||
|
if (this.encoding === 'array') return arrayConcat(this.body)
|
||||||
|
if (this.encoding === 'string') return stringConcat(this.body)
|
||||||
|
if (this.encoding === 'buffer') return bufferConcat(this.body)
|
||||||
|
if (this.encoding === 'uint8array') return u8Concat(this.body)
|
||||||
|
return this.body
|
||||||
|
}
|
||||||
|
|
||||||
|
var isArray = Array.isArray || function (arr) {
|
||||||
|
return Object.prototype.toString.call(arr) == '[object Array]'
|
||||||
|
}
|
||||||
|
|
||||||
|
function isArrayish (arr) {
|
||||||
|
return /Array\]$/.test(Object.prototype.toString.call(arr))
|
||||||
|
}
|
||||||
|
|
||||||
|
function stringConcat (parts) {
|
||||||
|
var strings = []
|
||||||
|
var needsToString = false
|
||||||
|
for (var i = 0; i < parts.length; i++) {
|
||||||
|
var p = parts[i]
|
||||||
|
if (typeof p === 'string') {
|
||||||
|
strings.push(p)
|
||||||
|
} else if (Buffer.isBuffer(p)) {
|
||||||
|
strings.push(p)
|
||||||
|
} else {
|
||||||
|
strings.push(Buffer(p))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Buffer.isBuffer(parts[0])) {
|
||||||
|
strings = Buffer.concat(strings)
|
||||||
|
strings = strings.toString('utf8')
|
||||||
|
} else {
|
||||||
|
strings = strings.join('')
|
||||||
|
}
|
||||||
|
return strings
|
||||||
|
}
|
||||||
|
|
||||||
|
function bufferConcat (parts) {
|
||||||
|
var bufs = []
|
||||||
|
for (var i = 0; i < parts.length; i++) {
|
||||||
|
var p = parts[i]
|
||||||
|
if (Buffer.isBuffer(p)) {
|
||||||
|
bufs.push(p)
|
||||||
|
} else if (typeof p === 'string' || isArrayish(p)
|
||||||
|
|| (p && typeof p.subarray === 'function')) {
|
||||||
|
bufs.push(Buffer(p))
|
||||||
|
} else bufs.push(Buffer(String(p)))
|
||||||
|
}
|
||||||
|
return Buffer.concat(bufs)
|
||||||
|
}
|
||||||
|
|
||||||
|
function arrayConcat (parts) {
|
||||||
|
var res = []
|
||||||
|
for (var i = 0; i < parts.length; i++) {
|
||||||
|
res.push.apply(res, parts[i])
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
function u8Concat (parts) {
|
||||||
|
var len = 0
|
||||||
|
for (var i = 0; i < parts.length; i++) {
|
||||||
|
if (typeof parts[i] === 'string') {
|
||||||
|
parts[i] = Buffer(parts[i])
|
||||||
|
}
|
||||||
|
len += parts[i].length
|
||||||
|
}
|
||||||
|
var u8 = new U8(len)
|
||||||
|
for (var i = 0, offset = 0; i < parts.length; i++) {
|
||||||
|
var part = parts[i]
|
||||||
|
for (var j = 0; j < part.length; j++) {
|
||||||
|
u8[offset++] = part[j]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return u8
|
||||||
|
}
|
108
src/node_modules/insert-module-globals/node_modules/concat-stream/package.json
generated
vendored
Normal file
108
src/node_modules/insert-module-globals/node_modules/concat-stream/package.json
generated
vendored
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"concat-stream@~1.4.1",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/browserify"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"concat-stream@~1.4.1",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/insert-module-globals"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "concat-stream@>=1.4.1 <1.5.0",
|
||||||
|
"_id": "concat-stream@1.4.10",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/insert-module-globals/concat-stream",
|
||||||
|
"_nodeVersion": "1.8.2",
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "max@maxogden.com",
|
||||||
|
"name": "maxogden"
|
||||||
|
},
|
||||||
|
"_npmVersion": "2.9.0",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "concat-stream",
|
||||||
|
"raw": "concat-stream@~1.4.1",
|
||||||
|
"rawSpec": "~1.4.1",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=1.4.1 <1.5.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/insert-module-globals"
|
||||||
|
],
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "concat-stream@~1.4.1",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/insert-module-globals",
|
||||||
|
"author": {
|
||||||
|
"email": "max@maxogden.com",
|
||||||
|
"name": "Max Ogden"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "http://github.com/maxogden/concat-stream/issues"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"inherits": "~2.0.1",
|
||||||
|
"readable-stream": "~1.1.9",
|
||||||
|
"typedarray": "~0.0.5"
|
||||||
|
},
|
||||||
|
"description": "writable stream that concatenates strings or binary data and calls a callback with the result",
|
||||||
|
"devDependencies": {
|
||||||
|
"tape": "~2.3.2"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "acc3bbf5602cb8cc980c6ac840fa7d8603e3ef36",
|
||||||
|
"tarball": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz"
|
||||||
|
},
|
||||||
|
"engines": [
|
||||||
|
"node >= 0.8"
|
||||||
|
],
|
||||||
|
"files": [
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"gitHead": "71d37be263a0457b8afcbb27237e71ddca634373",
|
||||||
|
"homepage": "https://github.com/maxogden/concat-stream#readme",
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "index.js",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "max@maxogden.com",
|
||||||
|
"name": "maxogden"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "concat-stream",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+ssh://git@github.com/maxogden/concat-stream.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "tape test/*.js test/server/*.js"
|
||||||
|
},
|
||||||
|
"tags": [
|
||||||
|
"stream",
|
||||||
|
"simple",
|
||||||
|
"util",
|
||||||
|
"utility"
|
||||||
|
],
|
||||||
|
"testling": {
|
||||||
|
"browsers": [
|
||||||
|
"ie/8..latest",
|
||||||
|
"firefox/17..latest",
|
||||||
|
"firefox/nightly",
|
||||||
|
"chrome/22..latest",
|
||||||
|
"chrome/canary",
|
||||||
|
"opera/12..latest",
|
||||||
|
"opera/next",
|
||||||
|
"safari/5.1..latest",
|
||||||
|
"ipad/6.0..latest",
|
||||||
|
"iphone/6.0..latest",
|
||||||
|
"android-browser/4.2..latest"
|
||||||
|
],
|
||||||
|
"files": "test/*.js"
|
||||||
|
},
|
||||||
|
"version": "1.4.10"
|
||||||
|
}
|
94
src/node_modules/insert-module-globals/node_modules/concat-stream/readme.md
generated
vendored
Normal file
94
src/node_modules/insert-module-globals/node_modules/concat-stream/readme.md
generated
vendored
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# concat-stream
|
||||||
|
|
||||||
|
Writable stream that concatenates strings or binary data and calls a callback with the result. Not a transform stream -- more of a stream sink.
|
||||||
|
|
||||||
|
[![Build Status](https://travis-ci.org/maxogden/concat-stream.svg?branch=master)](https://travis-ci.org/maxogden/concat-stream)
|
||||||
|
|
||||||
|
[![NPM](https://nodei.co/npm/concat-stream.png)](https://nodei.co/npm/concat-stream/)
|
||||||
|
|
||||||
|
### description
|
||||||
|
|
||||||
|
Streams emit many buffers. If you want to collect all of the buffers, and when the stream ends concatenate all of the buffers together and receive a single buffer then this is the module for you.
|
||||||
|
|
||||||
|
Only use this if you know you can fit all of the output of your stream into a single Buffer (e.g. in RAM).
|
||||||
|
|
||||||
|
There are also `objectMode` streams that emit things other than Buffers, and you can concatenate these too. See below for details.
|
||||||
|
|
||||||
|
### examples
|
||||||
|
|
||||||
|
#### Buffers
|
||||||
|
|
||||||
|
```js
|
||||||
|
var fs = require('fs')
|
||||||
|
var concat = require('concat-stream')
|
||||||
|
|
||||||
|
var readStream = fs.createReadStream('cat.png')
|
||||||
|
var concatStream = concat(gotPicture)
|
||||||
|
|
||||||
|
readStream.on('error', handleError)
|
||||||
|
readStream.pipe(concatStream)
|
||||||
|
|
||||||
|
function gotPicture(imageBuffer) {
|
||||||
|
// imageBuffer is all of `cat.png` as a node.js Buffer
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleError(err) {
|
||||||
|
// handle your error appropriately here, e.g.:
|
||||||
|
console.error(err) // print the error to STDERR
|
||||||
|
process.exit(1) // exit program with non-zero exit code
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Arrays
|
||||||
|
|
||||||
|
```js
|
||||||
|
var write = concat(function(data) {})
|
||||||
|
write.write([1,2,3])
|
||||||
|
write.write([4,5,6])
|
||||||
|
write.end()
|
||||||
|
// data will be [1,2,3,4,5,6] in the above callback
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Uint8Arrays
|
||||||
|
|
||||||
|
```js
|
||||||
|
var write = concat(function(data) {})
|
||||||
|
var a = new Uint8Array(3)
|
||||||
|
a[0] = 97; a[1] = 98; a[2] = 99
|
||||||
|
write.write(a)
|
||||||
|
write.write('!')
|
||||||
|
write.end(Buffer('!!1'))
|
||||||
|
```
|
||||||
|
|
||||||
|
See `test/` for more examples
|
||||||
|
|
||||||
|
# methods
|
||||||
|
|
||||||
|
```js
|
||||||
|
var concat = require('concat-stream')
|
||||||
|
```
|
||||||
|
|
||||||
|
## var writable = concat(opts={}, cb)
|
||||||
|
|
||||||
|
Return a `writable` stream that will fire `cb(data)` with all of the data that
|
||||||
|
was written to the stream. Data can be written to `writable` as strings,
|
||||||
|
Buffers, arrays of byte integers, and Uint8Arrays.
|
||||||
|
|
||||||
|
By default `concat-stream` will give you back the same data type as the type of the first buffer written to the stream. Use `opts.encoding` to set what format `data` should be returned as, e.g. if you if you don't want to rely on the built-in type checking or for some other reason.
|
||||||
|
|
||||||
|
* `string` - get a string
|
||||||
|
* `buffer` - get back a Buffer
|
||||||
|
* `array` - get an array of byte integers
|
||||||
|
* `uint8array`, `u8`, `uint8` - get back a Uint8Array
|
||||||
|
* `object`, get back an array of Objects
|
||||||
|
|
||||||
|
If you don't specify an encoding, and the types can't be inferred (e.g. you write things that aren't in the list above), it will try to convert concat them into a `Buffer`.
|
||||||
|
|
||||||
|
# error handling
|
||||||
|
|
||||||
|
`concat-stream` does not handle errors for you, so you must handle errors on whatever streams you pipe into `concat-stream`. This is a general rule when programming with node.js streams: always handle errors on each and every stream. Since `concat-stream` is not itself a stream it does not emit errors.
|
||||||
|
|
||||||
|
# license
|
||||||
|
|
||||||
|
MIT LICENSE
|
5
src/node_modules/insert-module-globals/node_modules/readable-stream/.npmignore
generated
vendored
Normal file
5
src/node_modules/insert-module-globals/node_modules/readable-stream/.npmignore
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
build/
|
||||||
|
test/
|
||||||
|
examples/
|
||||||
|
fs.js
|
||||||
|
zlib.js
|
18
src/node_modules/insert-module-globals/node_modules/readable-stream/LICENSE
generated
vendored
Normal file
18
src/node_modules/insert-module-globals/node_modules/readable-stream/LICENSE
generated
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
Copyright Joyent, Inc. and other Node contributors. All rights reserved.
|
||||||
|
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.
|
15
src/node_modules/insert-module-globals/node_modules/readable-stream/README.md
generated
vendored
Normal file
15
src/node_modules/insert-module-globals/node_modules/readable-stream/README.md
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# readable-stream
|
||||||
|
|
||||||
|
***Node-core streams for userland***
|
||||||
|
|
||||||
|
[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/)
|
||||||
|
[![NPM](https://nodei.co/npm-dl/readable-stream.png&months=6&height=3)](https://nodei.co/npm/readable-stream/)
|
||||||
|
|
||||||
|
This package is a mirror of the Streams2 and Streams3 implementations in Node-core.
|
||||||
|
|
||||||
|
If you want to guarantee a stable streams base, regardless of what version of Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core.
|
||||||
|
|
||||||
|
**readable-stream** comes in two major versions, v1.0.x and v1.1.x. The former tracks the Streams2 implementation in Node 0.10, including bug-fixes and minor improvements as they are added. The latter tracks Streams3 as it develops in Node 0.11; we will likely see a v1.2.x branch for Node 0.12.
|
||||||
|
|
||||||
|
**readable-stream** uses proper patch-level versioning so if you pin to `"~1.0.0"` you’ll get the latest Node 0.10 Streams2 implementation, including any fixes and minor non-breaking improvements. The patch-level versions of 1.0.x and 1.1.x should mirror the patch-level versions of Node-core releases. You should prefer the **1.0.x** releases for now and when you’re ready to start using Streams3, pin to `"~1.1.0"`
|
||||||
|
|
1
src/node_modules/insert-module-globals/node_modules/readable-stream/duplex.js
generated
vendored
Normal file
1
src/node_modules/insert-module-globals/node_modules/readable-stream/duplex.js
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
module.exports = require("./lib/_stream_duplex.js")
|
923
src/node_modules/insert-module-globals/node_modules/readable-stream/float.patch
generated
vendored
Normal file
923
src/node_modules/insert-module-globals/node_modules/readable-stream/float.patch
generated
vendored
Normal file
@ -0,0 +1,923 @@
|
|||||||
|
diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js
|
||||||
|
index c5a741c..a2e0d8e 100644
|
||||||
|
--- a/lib/_stream_duplex.js
|
||||||
|
+++ b/lib/_stream_duplex.js
|
||||||
|
@@ -26,8 +26,8 @@
|
||||||
|
|
||||||
|
module.exports = Duplex;
|
||||||
|
var util = require('util');
|
||||||
|
-var Readable = require('_stream_readable');
|
||||||
|
-var Writable = require('_stream_writable');
|
||||||
|
+var Readable = require('./_stream_readable');
|
||||||
|
+var Writable = require('./_stream_writable');
|
||||||
|
|
||||||
|
util.inherits(Duplex, Readable);
|
||||||
|
|
||||||
|
diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js
|
||||||
|
index a5e9864..330c247 100644
|
||||||
|
--- a/lib/_stream_passthrough.js
|
||||||
|
+++ b/lib/_stream_passthrough.js
|
||||||
|
@@ -25,7 +25,7 @@
|
||||||
|
|
||||||
|
module.exports = PassThrough;
|
||||||
|
|
||||||
|
-var Transform = require('_stream_transform');
|
||||||
|
+var Transform = require('./_stream_transform');
|
||||||
|
var util = require('util');
|
||||||
|
util.inherits(PassThrough, Transform);
|
||||||
|
|
||||||
|
diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js
|
||||||
|
index 0c3fe3e..90a8298 100644
|
||||||
|
--- a/lib/_stream_readable.js
|
||||||
|
+++ b/lib/_stream_readable.js
|
||||||
|
@@ -23,10 +23,34 @@ module.exports = Readable;
|
||||||
|
Readable.ReadableState = ReadableState;
|
||||||
|
|
||||||
|
var EE = require('events').EventEmitter;
|
||||||
|
+if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
|
||||||
|
+ return emitter.listeners(type).length;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+if (!global.setImmediate) global.setImmediate = function setImmediate(fn) {
|
||||||
|
+ return setTimeout(fn, 0);
|
||||||
|
+};
|
||||||
|
+if (!global.clearImmediate) global.clearImmediate = function clearImmediate(i) {
|
||||||
|
+ return clearTimeout(i);
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
var Stream = require('stream');
|
||||||
|
var util = require('util');
|
||||||
|
+if (!util.isUndefined) {
|
||||||
|
+ var utilIs = require('core-util-is');
|
||||||
|
+ for (var f in utilIs) {
|
||||||
|
+ util[f] = utilIs[f];
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
var StringDecoder;
|
||||||
|
-var debug = util.debuglog('stream');
|
||||||
|
+var debug;
|
||||||
|
+if (util.debuglog)
|
||||||
|
+ debug = util.debuglog('stream');
|
||||||
|
+else try {
|
||||||
|
+ debug = require('debuglog')('stream');
|
||||||
|
+} catch (er) {
|
||||||
|
+ debug = function() {};
|
||||||
|
+}
|
||||||
|
|
||||||
|
util.inherits(Readable, Stream);
|
||||||
|
|
||||||
|
@@ -380,7 +404,7 @@ function chunkInvalid(state, chunk) {
|
||||||
|
|
||||||
|
|
||||||
|
function onEofChunk(stream, state) {
|
||||||
|
- if (state.decoder && !state.ended) {
|
||||||
|
+ if (state.decoder && !state.ended && state.decoder.end) {
|
||||||
|
var chunk = state.decoder.end();
|
||||||
|
if (chunk && chunk.length) {
|
||||||
|
state.buffer.push(chunk);
|
||||||
|
diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js
|
||||||
|
index b1f9fcc..b0caf57 100644
|
||||||
|
--- a/lib/_stream_transform.js
|
||||||
|
+++ b/lib/_stream_transform.js
|
||||||
|
@@ -64,8 +64,14 @@
|
||||||
|
|
||||||
|
module.exports = Transform;
|
||||||
|
|
||||||
|
-var Duplex = require('_stream_duplex');
|
||||||
|
+var Duplex = require('./_stream_duplex');
|
||||||
|
var util = require('util');
|
||||||
|
+if (!util.isUndefined) {
|
||||||
|
+ var utilIs = require('core-util-is');
|
||||||
|
+ for (var f in utilIs) {
|
||||||
|
+ util[f] = utilIs[f];
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
util.inherits(Transform, Duplex);
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js
|
||||||
|
index ba2e920..f49288b 100644
|
||||||
|
--- a/lib/_stream_writable.js
|
||||||
|
+++ b/lib/_stream_writable.js
|
||||||
|
@@ -27,6 +27,12 @@ module.exports = Writable;
|
||||||
|
Writable.WritableState = WritableState;
|
||||||
|
|
||||||
|
var util = require('util');
|
||||||
|
+if (!util.isUndefined) {
|
||||||
|
+ var utilIs = require('core-util-is');
|
||||||
|
+ for (var f in utilIs) {
|
||||||
|
+ util[f] = utilIs[f];
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
var Stream = require('stream');
|
||||||
|
|
||||||
|
util.inherits(Writable, Stream);
|
||||||
|
@@ -119,7 +125,7 @@ function WritableState(options, stream) {
|
||||||
|
function Writable(options) {
|
||||||
|
// Writable ctor is applied to Duplexes, though they're not
|
||||||
|
// instanceof Writable, they're instanceof Readable.
|
||||||
|
- if (!(this instanceof Writable) && !(this instanceof Stream.Duplex))
|
||||||
|
+ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex')))
|
||||||
|
return new Writable(options);
|
||||||
|
|
||||||
|
this._writableState = new WritableState(options, this);
|
||||||
|
diff --git a/test/simple/test-stream-big-push.js b/test/simple/test-stream-big-push.js
|
||||||
|
index e3787e4..8cd2127 100644
|
||||||
|
--- a/test/simple/test-stream-big-push.js
|
||||||
|
+++ b/test/simple/test-stream-big-push.js
|
||||||
|
@@ -21,7 +21,7 @@
|
||||||
|
|
||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
-var stream = require('stream');
|
||||||
|
+var stream = require('../../');
|
||||||
|
var str = 'asdfasdfasdfasdfasdf';
|
||||||
|
|
||||||
|
var r = new stream.Readable({
|
||||||
|
diff --git a/test/simple/test-stream-end-paused.js b/test/simple/test-stream-end-paused.js
|
||||||
|
index bb73777..d40efc7 100644
|
||||||
|
--- a/test/simple/test-stream-end-paused.js
|
||||||
|
+++ b/test/simple/test-stream-end-paused.js
|
||||||
|
@@ -25,7 +25,7 @@ var gotEnd = false;
|
||||||
|
|
||||||
|
// Make sure we don't miss the end event for paused 0-length streams
|
||||||
|
|
||||||
|
-var Readable = require('stream').Readable;
|
||||||
|
+var Readable = require('../../').Readable;
|
||||||
|
var stream = new Readable();
|
||||||
|
var calledRead = false;
|
||||||
|
stream._read = function() {
|
||||||
|
diff --git a/test/simple/test-stream-pipe-after-end.js b/test/simple/test-stream-pipe-after-end.js
|
||||||
|
index b46ee90..0be8366 100644
|
||||||
|
--- a/test/simple/test-stream-pipe-after-end.js
|
||||||
|
+++ b/test/simple/test-stream-pipe-after-end.js
|
||||||
|
@@ -22,8 +22,8 @@
|
||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
-var Readable = require('_stream_readable');
|
||||||
|
-var Writable = require('_stream_writable');
|
||||||
|
+var Readable = require('../../lib/_stream_readable');
|
||||||
|
+var Writable = require('../../lib/_stream_writable');
|
||||||
|
var util = require('util');
|
||||||
|
|
||||||
|
util.inherits(TestReadable, Readable);
|
||||||
|
diff --git a/test/simple/test-stream-pipe-cleanup.js b/test/simple/test-stream-pipe-cleanup.js
|
||||||
|
deleted file mode 100644
|
||||||
|
index f689358..0000000
|
||||||
|
--- a/test/simple/test-stream-pipe-cleanup.js
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,122 +0,0 @@
|
||||||
|
-// Copyright Joyent, Inc. and other Node contributors.
|
||||||
|
-//
|
||||||
|
-// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
-// copy of this software and associated documentation files (the
|
||||||
|
-// "Software"), to deal in the Software without restriction, including
|
||||||
|
-// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
-// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||||
|
-// persons to whom the Software is furnished to do so, subject to the
|
||||||
|
-// following conditions:
|
||||||
|
-//
|
||||||
|
-// The above copyright notice and this permission notice shall be included
|
||||||
|
-// in all copies or substantial portions of the Software.
|
||||||
|
-//
|
||||||
|
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||||
|
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
-
|
||||||
|
-// This test asserts that Stream.prototype.pipe does not leave listeners
|
||||||
|
-// hanging on the source or dest.
|
||||||
|
-
|
||||||
|
-var common = require('../common');
|
||||||
|
-var stream = require('stream');
|
||||||
|
-var assert = require('assert');
|
||||||
|
-var util = require('util');
|
||||||
|
-
|
||||||
|
-function Writable() {
|
||||||
|
- this.writable = true;
|
||||||
|
- this.endCalls = 0;
|
||||||
|
- stream.Stream.call(this);
|
||||||
|
-}
|
||||||
|
-util.inherits(Writable, stream.Stream);
|
||||||
|
-Writable.prototype.end = function() {
|
||||||
|
- this.endCalls++;
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
-Writable.prototype.destroy = function() {
|
||||||
|
- this.endCalls++;
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
-function Readable() {
|
||||||
|
- this.readable = true;
|
||||||
|
- stream.Stream.call(this);
|
||||||
|
-}
|
||||||
|
-util.inherits(Readable, stream.Stream);
|
||||||
|
-
|
||||||
|
-function Duplex() {
|
||||||
|
- this.readable = true;
|
||||||
|
- Writable.call(this);
|
||||||
|
-}
|
||||||
|
-util.inherits(Duplex, Writable);
|
||||||
|
-
|
||||||
|
-var i = 0;
|
||||||
|
-var limit = 100;
|
||||||
|
-
|
||||||
|
-var w = new Writable();
|
||||||
|
-
|
||||||
|
-var r;
|
||||||
|
-
|
||||||
|
-for (i = 0; i < limit; i++) {
|
||||||
|
- r = new Readable();
|
||||||
|
- r.pipe(w);
|
||||||
|
- r.emit('end');
|
||||||
|
-}
|
||||||
|
-assert.equal(0, r.listeners('end').length);
|
||||||
|
-assert.equal(limit, w.endCalls);
|
||||||
|
-
|
||||||
|
-w.endCalls = 0;
|
||||||
|
-
|
||||||
|
-for (i = 0; i < limit; i++) {
|
||||||
|
- r = new Readable();
|
||||||
|
- r.pipe(w);
|
||||||
|
- r.emit('close');
|
||||||
|
-}
|
||||||
|
-assert.equal(0, r.listeners('close').length);
|
||||||
|
-assert.equal(limit, w.endCalls);
|
||||||
|
-
|
||||||
|
-w.endCalls = 0;
|
||||||
|
-
|
||||||
|
-r = new Readable();
|
||||||
|
-
|
||||||
|
-for (i = 0; i < limit; i++) {
|
||||||
|
- w = new Writable();
|
||||||
|
- r.pipe(w);
|
||||||
|
- w.emit('close');
|
||||||
|
-}
|
||||||
|
-assert.equal(0, w.listeners('close').length);
|
||||||
|
-
|
||||||
|
-r = new Readable();
|
||||||
|
-w = new Writable();
|
||||||
|
-var d = new Duplex();
|
||||||
|
-r.pipe(d); // pipeline A
|
||||||
|
-d.pipe(w); // pipeline B
|
||||||
|
-assert.equal(r.listeners('end').length, 2); // A.onend, A.cleanup
|
||||||
|
-assert.equal(r.listeners('close').length, 2); // A.onclose, A.cleanup
|
||||||
|
-assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup
|
||||||
|
-assert.equal(d.listeners('close').length, 3); // A.cleanup, B.onclose, B.cleanup
|
||||||
|
-assert.equal(w.listeners('end').length, 0);
|
||||||
|
-assert.equal(w.listeners('close').length, 1); // B.cleanup
|
||||||
|
-
|
||||||
|
-r.emit('end');
|
||||||
|
-assert.equal(d.endCalls, 1);
|
||||||
|
-assert.equal(w.endCalls, 0);
|
||||||
|
-assert.equal(r.listeners('end').length, 0);
|
||||||
|
-assert.equal(r.listeners('close').length, 0);
|
||||||
|
-assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup
|
||||||
|
-assert.equal(d.listeners('close').length, 2); // B.onclose, B.cleanup
|
||||||
|
-assert.equal(w.listeners('end').length, 0);
|
||||||
|
-assert.equal(w.listeners('close').length, 1); // B.cleanup
|
||||||
|
-
|
||||||
|
-d.emit('end');
|
||||||
|
-assert.equal(d.endCalls, 1);
|
||||||
|
-assert.equal(w.endCalls, 1);
|
||||||
|
-assert.equal(r.listeners('end').length, 0);
|
||||||
|
-assert.equal(r.listeners('close').length, 0);
|
||||||
|
-assert.equal(d.listeners('end').length, 0);
|
||||||
|
-assert.equal(d.listeners('close').length, 0);
|
||||||
|
-assert.equal(w.listeners('end').length, 0);
|
||||||
|
-assert.equal(w.listeners('close').length, 0);
|
||||||
|
diff --git a/test/simple/test-stream-pipe-error-handling.js b/test/simple/test-stream-pipe-error-handling.js
|
||||||
|
index c5d724b..c7d6b7d 100644
|
||||||
|
--- a/test/simple/test-stream-pipe-error-handling.js
|
||||||
|
+++ b/test/simple/test-stream-pipe-error-handling.js
|
||||||
|
@@ -21,7 +21,7 @@
|
||||||
|
|
||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
-var Stream = require('stream').Stream;
|
||||||
|
+var Stream = require('../../').Stream;
|
||||||
|
|
||||||
|
(function testErrorListenerCatches() {
|
||||||
|
var source = new Stream();
|
||||||
|
diff --git a/test/simple/test-stream-pipe-event.js b/test/simple/test-stream-pipe-event.js
|
||||||
|
index cb9d5fe..56f8d61 100644
|
||||||
|
--- a/test/simple/test-stream-pipe-event.js
|
||||||
|
+++ b/test/simple/test-stream-pipe-event.js
|
||||||
|
@@ -20,7 +20,7 @@
|
||||||
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
var common = require('../common');
|
||||||
|
-var stream = require('stream');
|
||||||
|
+var stream = require('../../');
|
||||||
|
var assert = require('assert');
|
||||||
|
var util = require('util');
|
||||||
|
|
||||||
|
diff --git a/test/simple/test-stream-push-order.js b/test/simple/test-stream-push-order.js
|
||||||
|
index f2e6ec2..a5c9bf9 100644
|
||||||
|
--- a/test/simple/test-stream-push-order.js
|
||||||
|
+++ b/test/simple/test-stream-push-order.js
|
||||||
|
@@ -20,7 +20,7 @@
|
||||||
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
var common = require('../common.js');
|
||||||
|
-var Readable = require('stream').Readable;
|
||||||
|
+var Readable = require('../../').Readable;
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
var s = new Readable({
|
||||||
|
diff --git a/test/simple/test-stream-push-strings.js b/test/simple/test-stream-push-strings.js
|
||||||
|
index 06f43dc..1701a9a 100644
|
||||||
|
--- a/test/simple/test-stream-push-strings.js
|
||||||
|
+++ b/test/simple/test-stream-push-strings.js
|
||||||
|
@@ -22,7 +22,7 @@
|
||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
-var Readable = require('stream').Readable;
|
||||||
|
+var Readable = require('../../').Readable;
|
||||||
|
var util = require('util');
|
||||||
|
|
||||||
|
util.inherits(MyStream, Readable);
|
||||||
|
diff --git a/test/simple/test-stream-readable-event.js b/test/simple/test-stream-readable-event.js
|
||||||
|
index ba6a577..a8e6f7b 100644
|
||||||
|
--- a/test/simple/test-stream-readable-event.js
|
||||||
|
+++ b/test/simple/test-stream-readable-event.js
|
||||||
|
@@ -22,7 +22,7 @@
|
||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
-var Readable = require('stream').Readable;
|
||||||
|
+var Readable = require('../../').Readable;
|
||||||
|
|
||||||
|
(function first() {
|
||||||
|
// First test, not reading when the readable is added.
|
||||||
|
diff --git a/test/simple/test-stream-readable-flow-recursion.js b/test/simple/test-stream-readable-flow-recursion.js
|
||||||
|
index 2891ad6..11689ba 100644
|
||||||
|
--- a/test/simple/test-stream-readable-flow-recursion.js
|
||||||
|
+++ b/test/simple/test-stream-readable-flow-recursion.js
|
||||||
|
@@ -27,7 +27,7 @@ var assert = require('assert');
|
||||||
|
// more data continuously, but without triggering a nextTick
|
||||||
|
// warning or RangeError.
|
||||||
|
|
||||||
|
-var Readable = require('stream').Readable;
|
||||||
|
+var Readable = require('../../').Readable;
|
||||||
|
|
||||||
|
// throw an error if we trigger a nextTick warning.
|
||||||
|
process.throwDeprecation = true;
|
||||||
|
diff --git a/test/simple/test-stream-unshift-empty-chunk.js b/test/simple/test-stream-unshift-empty-chunk.js
|
||||||
|
index 0c96476..7827538 100644
|
||||||
|
--- a/test/simple/test-stream-unshift-empty-chunk.js
|
||||||
|
+++ b/test/simple/test-stream-unshift-empty-chunk.js
|
||||||
|
@@ -24,7 +24,7 @@ var assert = require('assert');
|
||||||
|
|
||||||
|
// This test verifies that stream.unshift(Buffer(0)) or
|
||||||
|
// stream.unshift('') does not set state.reading=false.
|
||||||
|
-var Readable = require('stream').Readable;
|
||||||
|
+var Readable = require('../../').Readable;
|
||||||
|
|
||||||
|
var r = new Readable();
|
||||||
|
var nChunks = 10;
|
||||||
|
diff --git a/test/simple/test-stream-unshift-read-race.js b/test/simple/test-stream-unshift-read-race.js
|
||||||
|
index 83fd9fa..17c18aa 100644
|
||||||
|
--- a/test/simple/test-stream-unshift-read-race.js
|
||||||
|
+++ b/test/simple/test-stream-unshift-read-race.js
|
||||||
|
@@ -29,7 +29,7 @@ var assert = require('assert');
|
||||||
|
// 3. push() after the EOF signaling null is an error.
|
||||||
|
// 4. _read() is not called after pushing the EOF null chunk.
|
||||||
|
|
||||||
|
-var stream = require('stream');
|
||||||
|
+var stream = require('../../');
|
||||||
|
var hwm = 10;
|
||||||
|
var r = stream.Readable({ highWaterMark: hwm });
|
||||||
|
var chunks = 10;
|
||||||
|
@@ -51,7 +51,14 @@ r._read = function(n) {
|
||||||
|
|
||||||
|
function push(fast) {
|
||||||
|
assert(!pushedNull, 'push() after null push');
|
||||||
|
- var c = pos >= data.length ? null : data.slice(pos, pos + n);
|
||||||
|
+ var c;
|
||||||
|
+ if (pos >= data.length)
|
||||||
|
+ c = null;
|
||||||
|
+ else {
|
||||||
|
+ if (n + pos > data.length)
|
||||||
|
+ n = data.length - pos;
|
||||||
|
+ c = data.slice(pos, pos + n);
|
||||||
|
+ }
|
||||||
|
pushedNull = c === null;
|
||||||
|
if (fast) {
|
||||||
|
pos += n;
|
||||||
|
diff --git a/test/simple/test-stream-writev.js b/test/simple/test-stream-writev.js
|
||||||
|
index 5b49e6e..b5321f3 100644
|
||||||
|
--- a/test/simple/test-stream-writev.js
|
||||||
|
+++ b/test/simple/test-stream-writev.js
|
||||||
|
@@ -22,7 +22,7 @@
|
||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
-var stream = require('stream');
|
||||||
|
+var stream = require('../../');
|
||||||
|
|
||||||
|
var queue = [];
|
||||||
|
for (var decode = 0; decode < 2; decode++) {
|
||||||
|
diff --git a/test/simple/test-stream2-basic.js b/test/simple/test-stream2-basic.js
|
||||||
|
index 3814bf0..248c1be 100644
|
||||||
|
--- a/test/simple/test-stream2-basic.js
|
||||||
|
+++ b/test/simple/test-stream2-basic.js
|
||||||
|
@@ -21,7 +21,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
var common = require('../common.js');
|
||||||
|
-var R = require('_stream_readable');
|
||||||
|
+var R = require('../../lib/_stream_readable');
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
var util = require('util');
|
||||||
|
diff --git a/test/simple/test-stream2-compatibility.js b/test/simple/test-stream2-compatibility.js
|
||||||
|
index 6cdd4e9..f0fa84b 100644
|
||||||
|
--- a/test/simple/test-stream2-compatibility.js
|
||||||
|
+++ b/test/simple/test-stream2-compatibility.js
|
||||||
|
@@ -21,7 +21,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
var common = require('../common.js');
|
||||||
|
-var R = require('_stream_readable');
|
||||||
|
+var R = require('../../lib/_stream_readable');
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
var util = require('util');
|
||||||
|
diff --git a/test/simple/test-stream2-finish-pipe.js b/test/simple/test-stream2-finish-pipe.js
|
||||||
|
index 39b274f..006a19b 100644
|
||||||
|
--- a/test/simple/test-stream2-finish-pipe.js
|
||||||
|
+++ b/test/simple/test-stream2-finish-pipe.js
|
||||||
|
@@ -20,7 +20,7 @@
|
||||||
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
var common = require('../common.js');
|
||||||
|
-var stream = require('stream');
|
||||||
|
+var stream = require('../../');
|
||||||
|
var Buffer = require('buffer').Buffer;
|
||||||
|
|
||||||
|
var r = new stream.Readable();
|
||||||
|
diff --git a/test/simple/test-stream2-fs.js b/test/simple/test-stream2-fs.js
|
||||||
|
deleted file mode 100644
|
||||||
|
index e162406..0000000
|
||||||
|
--- a/test/simple/test-stream2-fs.js
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,72 +0,0 @@
|
||||||
|
-// Copyright Joyent, Inc. and other Node contributors.
|
||||||
|
-//
|
||||||
|
-// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
-// copy of this software and associated documentation files (the
|
||||||
|
-// "Software"), to deal in the Software without restriction, including
|
||||||
|
-// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
-// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||||
|
-// persons to whom the Software is furnished to do so, subject to the
|
||||||
|
-// following conditions:
|
||||||
|
-//
|
||||||
|
-// The above copyright notice and this permission notice shall be included
|
||||||
|
-// in all copies or substantial portions of the Software.
|
||||||
|
-//
|
||||||
|
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||||
|
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-var common = require('../common.js');
|
||||||
|
-var R = require('_stream_readable');
|
||||||
|
-var assert = require('assert');
|
||||||
|
-
|
||||||
|
-var fs = require('fs');
|
||||||
|
-var FSReadable = fs.ReadStream;
|
||||||
|
-
|
||||||
|
-var path = require('path');
|
||||||
|
-var file = path.resolve(common.fixturesDir, 'x1024.txt');
|
||||||
|
-
|
||||||
|
-var size = fs.statSync(file).size;
|
||||||
|
-
|
||||||
|
-var expectLengths = [1024];
|
||||||
|
-
|
||||||
|
-var util = require('util');
|
||||||
|
-var Stream = require('stream');
|
||||||
|
-
|
||||||
|
-util.inherits(TestWriter, Stream);
|
||||||
|
-
|
||||||
|
-function TestWriter() {
|
||||||
|
- Stream.apply(this);
|
||||||
|
- this.buffer = [];
|
||||||
|
- this.length = 0;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-TestWriter.prototype.write = function(c) {
|
||||||
|
- this.buffer.push(c.toString());
|
||||||
|
- this.length += c.length;
|
||||||
|
- return true;
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
-TestWriter.prototype.end = function(c) {
|
||||||
|
- if (c) this.buffer.push(c.toString());
|
||||||
|
- this.emit('results', this.buffer);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-var r = new FSReadable(file);
|
||||||
|
-var w = new TestWriter();
|
||||||
|
-
|
||||||
|
-w.on('results', function(res) {
|
||||||
|
- console.error(res, w.length);
|
||||||
|
- assert.equal(w.length, size);
|
||||||
|
- var l = 0;
|
||||||
|
- assert.deepEqual(res.map(function (c) {
|
||||||
|
- return c.length;
|
||||||
|
- }), expectLengths);
|
||||||
|
- console.log('ok');
|
||||||
|
-});
|
||||||
|
-
|
||||||
|
-r.pipe(w);
|
||||||
|
diff --git a/test/simple/test-stream2-httpclient-response-end.js b/test/simple/test-stream2-httpclient-response-end.js
|
||||||
|
deleted file mode 100644
|
||||||
|
index 15cffc2..0000000
|
||||||
|
--- a/test/simple/test-stream2-httpclient-response-end.js
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,52 +0,0 @@
|
||||||
|
-// Copyright Joyent, Inc. and other Node contributors.
|
||||||
|
-//
|
||||||
|
-// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
-// copy of this software and associated documentation files (the
|
||||||
|
-// "Software"), to deal in the Software without restriction, including
|
||||||
|
-// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
-// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||||
|
-// persons to whom the Software is furnished to do so, subject to the
|
||||||
|
-// following conditions:
|
||||||
|
-//
|
||||||
|
-// The above copyright notice and this permission notice shall be included
|
||||||
|
-// in all copies or substantial portions of the Software.
|
||||||
|
-//
|
||||||
|
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||||
|
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
-
|
||||||
|
-var common = require('../common.js');
|
||||||
|
-var assert = require('assert');
|
||||||
|
-var http = require('http');
|
||||||
|
-var msg = 'Hello';
|
||||||
|
-var readable_event = false;
|
||||||
|
-var end_event = false;
|
||||||
|
-var server = http.createServer(function(req, res) {
|
||||||
|
- res.writeHead(200, {'Content-Type': 'text/plain'});
|
||||||
|
- res.end(msg);
|
||||||
|
-}).listen(common.PORT, function() {
|
||||||
|
- http.get({port: common.PORT}, function(res) {
|
||||||
|
- var data = '';
|
||||||
|
- res.on('readable', function() {
|
||||||
|
- console.log('readable event');
|
||||||
|
- readable_event = true;
|
||||||
|
- data += res.read();
|
||||||
|
- });
|
||||||
|
- res.on('end', function() {
|
||||||
|
- console.log('end event');
|
||||||
|
- end_event = true;
|
||||||
|
- assert.strictEqual(msg, data);
|
||||||
|
- server.close();
|
||||||
|
- });
|
||||||
|
- });
|
||||||
|
-});
|
||||||
|
-
|
||||||
|
-process.on('exit', function() {
|
||||||
|
- assert(readable_event);
|
||||||
|
- assert(end_event);
|
||||||
|
-});
|
||||||
|
-
|
||||||
|
diff --git a/test/simple/test-stream2-large-read-stall.js b/test/simple/test-stream2-large-read-stall.js
|
||||||
|
index 2fbfbca..667985b 100644
|
||||||
|
--- a/test/simple/test-stream2-large-read-stall.js
|
||||||
|
+++ b/test/simple/test-stream2-large-read-stall.js
|
||||||
|
@@ -30,7 +30,7 @@ var PUSHSIZE = 20;
|
||||||
|
var PUSHCOUNT = 1000;
|
||||||
|
var HWM = 50;
|
||||||
|
|
||||||
|
-var Readable = require('stream').Readable;
|
||||||
|
+var Readable = require('../../').Readable;
|
||||||
|
var r = new Readable({
|
||||||
|
highWaterMark: HWM
|
||||||
|
});
|
||||||
|
@@ -39,23 +39,23 @@ var rs = r._readableState;
|
||||||
|
r._read = push;
|
||||||
|
|
||||||
|
r.on('readable', function() {
|
||||||
|
- console.error('>> readable');
|
||||||
|
+ //console.error('>> readable');
|
||||||
|
do {
|
||||||
|
- console.error(' > read(%d)', READSIZE);
|
||||||
|
+ //console.error(' > read(%d)', READSIZE);
|
||||||
|
var ret = r.read(READSIZE);
|
||||||
|
- console.error(' < %j (%d remain)', ret && ret.length, rs.length);
|
||||||
|
+ //console.error(' < %j (%d remain)', ret && ret.length, rs.length);
|
||||||
|
} while (ret && ret.length === READSIZE);
|
||||||
|
|
||||||
|
- console.error('<< after read()',
|
||||||
|
- ret && ret.length,
|
||||||
|
- rs.needReadable,
|
||||||
|
- rs.length);
|
||||||
|
+ //console.error('<< after read()',
|
||||||
|
+ // ret && ret.length,
|
||||||
|
+ // rs.needReadable,
|
||||||
|
+ // rs.length);
|
||||||
|
});
|
||||||
|
|
||||||
|
var endEmitted = false;
|
||||||
|
r.on('end', function() {
|
||||||
|
endEmitted = true;
|
||||||
|
- console.error('end');
|
||||||
|
+ //console.error('end');
|
||||||
|
});
|
||||||
|
|
||||||
|
var pushes = 0;
|
||||||
|
@@ -64,11 +64,11 @@ function push() {
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (pushes++ === PUSHCOUNT) {
|
||||||
|
- console.error(' push(EOF)');
|
||||||
|
+ //console.error(' push(EOF)');
|
||||||
|
return r.push(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
- console.error(' push #%d', pushes);
|
||||||
|
+ //console.error(' push #%d', pushes);
|
||||||
|
if (r.push(new Buffer(PUSHSIZE)))
|
||||||
|
setTimeout(push);
|
||||||
|
}
|
||||||
|
diff --git a/test/simple/test-stream2-objects.js b/test/simple/test-stream2-objects.js
|
||||||
|
index 3e6931d..ff47d89 100644
|
||||||
|
--- a/test/simple/test-stream2-objects.js
|
||||||
|
+++ b/test/simple/test-stream2-objects.js
|
||||||
|
@@ -21,8 +21,8 @@
|
||||||
|
|
||||||
|
|
||||||
|
var common = require('../common.js');
|
||||||
|
-var Readable = require('_stream_readable');
|
||||||
|
-var Writable = require('_stream_writable');
|
||||||
|
+var Readable = require('../../lib/_stream_readable');
|
||||||
|
+var Writable = require('../../lib/_stream_writable');
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
// tiny node-tap lookalike.
|
||||||
|
diff --git a/test/simple/test-stream2-pipe-error-handling.js b/test/simple/test-stream2-pipe-error-handling.js
|
||||||
|
index cf7531c..e3f3e4e 100644
|
||||||
|
--- a/test/simple/test-stream2-pipe-error-handling.js
|
||||||
|
+++ b/test/simple/test-stream2-pipe-error-handling.js
|
||||||
|
@@ -21,7 +21,7 @@
|
||||||
|
|
||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
-var stream = require('stream');
|
||||||
|
+var stream = require('../../');
|
||||||
|
|
||||||
|
(function testErrorListenerCatches() {
|
||||||
|
var count = 1000;
|
||||||
|
diff --git a/test/simple/test-stream2-pipe-error-once-listener.js b/test/simple/test-stream2-pipe-error-once-listener.js
|
||||||
|
index 5e8e3cb..53b2616 100755
|
||||||
|
--- a/test/simple/test-stream2-pipe-error-once-listener.js
|
||||||
|
+++ b/test/simple/test-stream2-pipe-error-once-listener.js
|
||||||
|
@@ -24,7 +24,7 @@ var common = require('../common.js');
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
var util = require('util');
|
||||||
|
-var stream = require('stream');
|
||||||
|
+var stream = require('../../');
|
||||||
|
|
||||||
|
|
||||||
|
var Read = function() {
|
||||||
|
diff --git a/test/simple/test-stream2-push.js b/test/simple/test-stream2-push.js
|
||||||
|
index b63edc3..eb2b0e9 100644
|
||||||
|
--- a/test/simple/test-stream2-push.js
|
||||||
|
+++ b/test/simple/test-stream2-push.js
|
||||||
|
@@ -20,7 +20,7 @@
|
||||||
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
var common = require('../common.js');
|
||||||
|
-var stream = require('stream');
|
||||||
|
+var stream = require('../../');
|
||||||
|
var Readable = stream.Readable;
|
||||||
|
var Writable = stream.Writable;
|
||||||
|
var assert = require('assert');
|
||||||
|
diff --git a/test/simple/test-stream2-read-sync-stack.js b/test/simple/test-stream2-read-sync-stack.js
|
||||||
|
index e8a7305..9740a47 100644
|
||||||
|
--- a/test/simple/test-stream2-read-sync-stack.js
|
||||||
|
+++ b/test/simple/test-stream2-read-sync-stack.js
|
||||||
|
@@ -21,7 +21,7 @@
|
||||||
|
|
||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
-var Readable = require('stream').Readable;
|
||||||
|
+var Readable = require('../../').Readable;
|
||||||
|
var r = new Readable();
|
||||||
|
var N = 256 * 1024;
|
||||||
|
|
||||||
|
diff --git a/test/simple/test-stream2-readable-empty-buffer-no-eof.js b/test/simple/test-stream2-readable-empty-buffer-no-eof.js
|
||||||
|
index cd30178..4b1659d 100644
|
||||||
|
--- a/test/simple/test-stream2-readable-empty-buffer-no-eof.js
|
||||||
|
+++ b/test/simple/test-stream2-readable-empty-buffer-no-eof.js
|
||||||
|
@@ -22,10 +22,9 @@
|
||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
-var Readable = require('stream').Readable;
|
||||||
|
+var Readable = require('../../').Readable;
|
||||||
|
|
||||||
|
test1();
|
||||||
|
-test2();
|
||||||
|
|
||||||
|
function test1() {
|
||||||
|
var r = new Readable();
|
||||||
|
@@ -88,31 +87,3 @@ function test1() {
|
||||||
|
console.log('ok');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
-
|
||||||
|
-function test2() {
|
||||||
|
- var r = new Readable({ encoding: 'base64' });
|
||||||
|
- var reads = 5;
|
||||||
|
- r._read = function(n) {
|
||||||
|
- if (!reads--)
|
||||||
|
- return r.push(null); // EOF
|
||||||
|
- else
|
||||||
|
- return r.push(new Buffer('x'));
|
||||||
|
- };
|
||||||
|
-
|
||||||
|
- var results = [];
|
||||||
|
- function flow() {
|
||||||
|
- var chunk;
|
||||||
|
- while (null !== (chunk = r.read()))
|
||||||
|
- results.push(chunk + '');
|
||||||
|
- }
|
||||||
|
- r.on('readable', flow);
|
||||||
|
- r.on('end', function() {
|
||||||
|
- results.push('EOF');
|
||||||
|
- });
|
||||||
|
- flow();
|
||||||
|
-
|
||||||
|
- process.on('exit', function() {
|
||||||
|
- assert.deepEqual(results, [ 'eHh4', 'eHg=', 'EOF' ]);
|
||||||
|
- console.log('ok');
|
||||||
|
- });
|
||||||
|
-}
|
||||||
|
diff --git a/test/simple/test-stream2-readable-from-list.js b/test/simple/test-stream2-readable-from-list.js
|
||||||
|
index 7c96ffe..04a96f5 100644
|
||||||
|
--- a/test/simple/test-stream2-readable-from-list.js
|
||||||
|
+++ b/test/simple/test-stream2-readable-from-list.js
|
||||||
|
@@ -21,7 +21,7 @@
|
||||||
|
|
||||||
|
var assert = require('assert');
|
||||||
|
var common = require('../common.js');
|
||||||
|
-var fromList = require('_stream_readable')._fromList;
|
||||||
|
+var fromList = require('../../lib/_stream_readable')._fromList;
|
||||||
|
|
||||||
|
// tiny node-tap lookalike.
|
||||||
|
var tests = [];
|
||||||
|
diff --git a/test/simple/test-stream2-readable-legacy-drain.js b/test/simple/test-stream2-readable-legacy-drain.js
|
||||||
|
index 675da8e..51fd3d5 100644
|
||||||
|
--- a/test/simple/test-stream2-readable-legacy-drain.js
|
||||||
|
+++ b/test/simple/test-stream2-readable-legacy-drain.js
|
||||||
|
@@ -22,7 +22,7 @@
|
||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
-var Stream = require('stream');
|
||||||
|
+var Stream = require('../../');
|
||||||
|
var Readable = Stream.Readable;
|
||||||
|
|
||||||
|
var r = new Readable();
|
||||||
|
diff --git a/test/simple/test-stream2-readable-non-empty-end.js b/test/simple/test-stream2-readable-non-empty-end.js
|
||||||
|
index 7314ae7..c971898 100644
|
||||||
|
--- a/test/simple/test-stream2-readable-non-empty-end.js
|
||||||
|
+++ b/test/simple/test-stream2-readable-non-empty-end.js
|
||||||
|
@@ -21,7 +21,7 @@
|
||||||
|
|
||||||
|
var assert = require('assert');
|
||||||
|
var common = require('../common.js');
|
||||||
|
-var Readable = require('_stream_readable');
|
||||||
|
+var Readable = require('../../lib/_stream_readable');
|
||||||
|
|
||||||
|
var len = 0;
|
||||||
|
var chunks = new Array(10);
|
||||||
|
diff --git a/test/simple/test-stream2-readable-wrap-empty.js b/test/simple/test-stream2-readable-wrap-empty.js
|
||||||
|
index 2e5cf25..fd8a3dc 100644
|
||||||
|
--- a/test/simple/test-stream2-readable-wrap-empty.js
|
||||||
|
+++ b/test/simple/test-stream2-readable-wrap-empty.js
|
||||||
|
@@ -22,7 +22,7 @@
|
||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
-var Readable = require('_stream_readable');
|
||||||
|
+var Readable = require('../../lib/_stream_readable');
|
||||||
|
var EE = require('events').EventEmitter;
|
||||||
|
|
||||||
|
var oldStream = new EE();
|
||||||
|
diff --git a/test/simple/test-stream2-readable-wrap.js b/test/simple/test-stream2-readable-wrap.js
|
||||||
|
index 90eea01..6b177f7 100644
|
||||||
|
--- a/test/simple/test-stream2-readable-wrap.js
|
||||||
|
+++ b/test/simple/test-stream2-readable-wrap.js
|
||||||
|
@@ -22,8 +22,8 @@
|
||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
-var Readable = require('_stream_readable');
|
||||||
|
-var Writable = require('_stream_writable');
|
||||||
|
+var Readable = require('../../lib/_stream_readable');
|
||||||
|
+var Writable = require('../../lib/_stream_writable');
|
||||||
|
var EE = require('events').EventEmitter;
|
||||||
|
|
||||||
|
var testRuns = 0, completedRuns = 0;
|
||||||
|
diff --git a/test/simple/test-stream2-set-encoding.js b/test/simple/test-stream2-set-encoding.js
|
||||||
|
index 5d2c32a..685531b 100644
|
||||||
|
--- a/test/simple/test-stream2-set-encoding.js
|
||||||
|
+++ b/test/simple/test-stream2-set-encoding.js
|
||||||
|
@@ -22,7 +22,7 @@
|
||||||
|
|
||||||
|
var common = require('../common.js');
|
||||||
|
var assert = require('assert');
|
||||||
|
-var R = require('_stream_readable');
|
||||||
|
+var R = require('../../lib/_stream_readable');
|
||||||
|
var util = require('util');
|
||||||
|
|
||||||
|
// tiny node-tap lookalike.
|
||||||
|
diff --git a/test/simple/test-stream2-transform.js b/test/simple/test-stream2-transform.js
|
||||||
|
index 9c9ddd8..a0cacc6 100644
|
||||||
|
--- a/test/simple/test-stream2-transform.js
|
||||||
|
+++ b/test/simple/test-stream2-transform.js
|
||||||
|
@@ -21,8 +21,8 @@
|
||||||
|
|
||||||
|
var assert = require('assert');
|
||||||
|
var common = require('../common.js');
|
||||||
|
-var PassThrough = require('_stream_passthrough');
|
||||||
|
-var Transform = require('_stream_transform');
|
||||||
|
+var PassThrough = require('../../').PassThrough;
|
||||||
|
+var Transform = require('../../').Transform;
|
||||||
|
|
||||||
|
// tiny node-tap lookalike.
|
||||||
|
var tests = [];
|
||||||
|
diff --git a/test/simple/test-stream2-unpipe-drain.js b/test/simple/test-stream2-unpipe-drain.js
|
||||||
|
index d66dc3c..365b327 100644
|
||||||
|
--- a/test/simple/test-stream2-unpipe-drain.js
|
||||||
|
+++ b/test/simple/test-stream2-unpipe-drain.js
|
||||||
|
@@ -22,7 +22,7 @@
|
||||||
|
|
||||||
|
var common = require('../common.js');
|
||||||
|
var assert = require('assert');
|
||||||
|
-var stream = require('stream');
|
||||||
|
+var stream = require('../../');
|
||||||
|
var crypto = require('crypto');
|
||||||
|
|
||||||
|
var util = require('util');
|
||||||
|
diff --git a/test/simple/test-stream2-unpipe-leak.js b/test/simple/test-stream2-unpipe-leak.js
|
||||||
|
index 99f8746..17c92ae 100644
|
||||||
|
--- a/test/simple/test-stream2-unpipe-leak.js
|
||||||
|
+++ b/test/simple/test-stream2-unpipe-leak.js
|
||||||
|
@@ -22,7 +22,7 @@
|
||||||
|
|
||||||
|
var common = require('../common.js');
|
||||||
|
var assert = require('assert');
|
||||||
|
-var stream = require('stream');
|
||||||
|
+var stream = require('../../');
|
||||||
|
|
||||||
|
var chunk = new Buffer('hallo');
|
||||||
|
|
||||||
|
diff --git a/test/simple/test-stream2-writable.js b/test/simple/test-stream2-writable.js
|
||||||
|
index 704100c..209c3a6 100644
|
||||||
|
--- a/test/simple/test-stream2-writable.js
|
||||||
|
+++ b/test/simple/test-stream2-writable.js
|
||||||
|
@@ -20,8 +20,8 @@
|
||||||
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
var common = require('../common.js');
|
||||||
|
-var W = require('_stream_writable');
|
||||||
|
-var D = require('_stream_duplex');
|
||||||
|
+var W = require('../../').Writable;
|
||||||
|
+var D = require('../../').Duplex;
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
var util = require('util');
|
||||||
|
diff --git a/test/simple/test-stream3-pause-then-read.js b/test/simple/test-stream3-pause-then-read.js
|
||||||
|
index b91bde3..2f72c15 100644
|
||||||
|
--- a/test/simple/test-stream3-pause-then-read.js
|
||||||
|
+++ b/test/simple/test-stream3-pause-then-read.js
|
||||||
|
@@ -22,7 +22,7 @@
|
||||||
|
var common = require('../common');
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
-var stream = require('stream');
|
||||||
|
+var stream = require('../../');
|
||||||
|
var Readable = stream.Readable;
|
||||||
|
var Writable = stream.Writable;
|
||||||
|
|
89
src/node_modules/insert-module-globals/node_modules/readable-stream/lib/_stream_duplex.js
generated
vendored
Normal file
89
src/node_modules/insert-module-globals/node_modules/readable-stream/lib/_stream_duplex.js
generated
vendored
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
// Copyright Joyent, Inc. and other Node contributors.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
// copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||||
|
// persons to whom the Software is furnished to do so, subject to the
|
||||||
|
// following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||||
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
// a duplex stream is just a stream that is both readable and writable.
|
||||||
|
// Since JS doesn't have multiple prototypal inheritance, this class
|
||||||
|
// prototypally inherits from Readable, and then parasitically from
|
||||||
|
// Writable.
|
||||||
|
|
||||||
|
module.exports = Duplex;
|
||||||
|
|
||||||
|
/*<replacement>*/
|
||||||
|
var objectKeys = Object.keys || function (obj) {
|
||||||
|
var keys = [];
|
||||||
|
for (var key in obj) keys.push(key);
|
||||||
|
return keys;
|
||||||
|
}
|
||||||
|
/*</replacement>*/
|
||||||
|
|
||||||
|
|
||||||
|
/*<replacement>*/
|
||||||
|
var util = require('core-util-is');
|
||||||
|
util.inherits = require('inherits');
|
||||||
|
/*</replacement>*/
|
||||||
|
|
||||||
|
var Readable = require('./_stream_readable');
|
||||||
|
var Writable = require('./_stream_writable');
|
||||||
|
|
||||||
|
util.inherits(Duplex, Readable);
|
||||||
|
|
||||||
|
forEach(objectKeys(Writable.prototype), function(method) {
|
||||||
|
if (!Duplex.prototype[method])
|
||||||
|
Duplex.prototype[method] = Writable.prototype[method];
|
||||||
|
});
|
||||||
|
|
||||||
|
function Duplex(options) {
|
||||||
|
if (!(this instanceof Duplex))
|
||||||
|
return new Duplex(options);
|
||||||
|
|
||||||
|
Readable.call(this, options);
|
||||||
|
Writable.call(this, options);
|
||||||
|
|
||||||
|
if (options && options.readable === false)
|
||||||
|
this.readable = false;
|
||||||
|
|
||||||
|
if (options && options.writable === false)
|
||||||
|
this.writable = false;
|
||||||
|
|
||||||
|
this.allowHalfOpen = true;
|
||||||
|
if (options && options.allowHalfOpen === false)
|
||||||
|
this.allowHalfOpen = false;
|
||||||
|
|
||||||
|
this.once('end', onend);
|
||||||
|
}
|
||||||
|
|
||||||
|
// the no-half-open enforcer
|
||||||
|
function onend() {
|
||||||
|
// if we allow half-open state, or if the writable side ended,
|
||||||
|
// then we're ok.
|
||||||
|
if (this.allowHalfOpen || this._writableState.ended)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// no more data can be written.
|
||||||
|
// But allow more writes to happen in this tick.
|
||||||
|
process.nextTick(this.end.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
function forEach (xs, f) {
|
||||||
|
for (var i = 0, l = xs.length; i < l; i++) {
|
||||||
|
f(xs[i], i);
|
||||||
|
}
|
||||||
|
}
|
46
src/node_modules/insert-module-globals/node_modules/readable-stream/lib/_stream_passthrough.js
generated
vendored
Normal file
46
src/node_modules/insert-module-globals/node_modules/readable-stream/lib/_stream_passthrough.js
generated
vendored
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
// Copyright Joyent, Inc. and other Node contributors.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
// copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||||
|
// persons to whom the Software is furnished to do so, subject to the
|
||||||
|
// following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||||
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
// a passthrough stream.
|
||||||
|
// basically just the most minimal sort of Transform stream.
|
||||||
|
// Every written chunk gets output as-is.
|
||||||
|
|
||||||
|
module.exports = PassThrough;
|
||||||
|
|
||||||
|
var Transform = require('./_stream_transform');
|
||||||
|
|
||||||
|
/*<replacement>*/
|
||||||
|
var util = require('core-util-is');
|
||||||
|
util.inherits = require('inherits');
|
||||||
|
/*</replacement>*/
|
||||||
|
|
||||||
|
util.inherits(PassThrough, Transform);
|
||||||
|
|
||||||
|
function PassThrough(options) {
|
||||||
|
if (!(this instanceof PassThrough))
|
||||||
|
return new PassThrough(options);
|
||||||
|
|
||||||
|
Transform.call(this, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
PassThrough.prototype._transform = function(chunk, encoding, cb) {
|
||||||
|
cb(null, chunk);
|
||||||
|
};
|
951
src/node_modules/insert-module-globals/node_modules/readable-stream/lib/_stream_readable.js
generated
vendored
Normal file
951
src/node_modules/insert-module-globals/node_modules/readable-stream/lib/_stream_readable.js
generated
vendored
Normal file
@ -0,0 +1,951 @@
|
|||||||
|
// Copyright Joyent, Inc. and other Node contributors.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
// copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||||
|
// persons to whom the Software is furnished to do so, subject to the
|
||||||
|
// following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||||
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
module.exports = Readable;
|
||||||
|
|
||||||
|
/*<replacement>*/
|
||||||
|
var isArray = require('isarray');
|
||||||
|
/*</replacement>*/
|
||||||
|
|
||||||
|
|
||||||
|
/*<replacement>*/
|
||||||
|
var Buffer = require('buffer').Buffer;
|
||||||
|
/*</replacement>*/
|
||||||
|
|
||||||
|
Readable.ReadableState = ReadableState;
|
||||||
|
|
||||||
|
var EE = require('events').EventEmitter;
|
||||||
|
|
||||||
|
/*<replacement>*/
|
||||||
|
if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
|
||||||
|
return emitter.listeners(type).length;
|
||||||
|
};
|
||||||
|
/*</replacement>*/
|
||||||
|
|
||||||
|
var Stream = require('stream');
|
||||||
|
|
||||||
|
/*<replacement>*/
|
||||||
|
var util = require('core-util-is');
|
||||||
|
util.inherits = require('inherits');
|
||||||
|
/*</replacement>*/
|
||||||
|
|
||||||
|
var StringDecoder;
|
||||||
|
|
||||||
|
|
||||||
|
/*<replacement>*/
|
||||||
|
var debug = require('util');
|
||||||
|
if (debug && debug.debuglog) {
|
||||||
|
debug = debug.debuglog('stream');
|
||||||
|
} else {
|
||||||
|
debug = function () {};
|
||||||
|
}
|
||||||
|
/*</replacement>*/
|
||||||
|
|
||||||
|
|
||||||
|
util.inherits(Readable, Stream);
|
||||||
|
|
||||||
|
function ReadableState(options, stream) {
|
||||||
|
var Duplex = require('./_stream_duplex');
|
||||||
|
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
// the point at which it stops calling _read() to fill the buffer
|
||||||
|
// Note: 0 is a valid value, means "don't call _read preemptively ever"
|
||||||
|
var hwm = options.highWaterMark;
|
||||||
|
var defaultHwm = options.objectMode ? 16 : 16 * 1024;
|
||||||
|
this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
|
||||||
|
|
||||||
|
// cast to ints.
|
||||||
|
this.highWaterMark = ~~this.highWaterMark;
|
||||||
|
|
||||||
|
this.buffer = [];
|
||||||
|
this.length = 0;
|
||||||
|
this.pipes = null;
|
||||||
|
this.pipesCount = 0;
|
||||||
|
this.flowing = null;
|
||||||
|
this.ended = false;
|
||||||
|
this.endEmitted = false;
|
||||||
|
this.reading = false;
|
||||||
|
|
||||||
|
// a flag to be able to tell if the onwrite cb is called immediately,
|
||||||
|
// or on a later tick. We set this to true at first, because any
|
||||||
|
// actions that shouldn't happen until "later" should generally also
|
||||||
|
// not happen before the first write call.
|
||||||
|
this.sync = true;
|
||||||
|
|
||||||
|
// whenever we return null, then we set a flag to say
|
||||||
|
// that we're awaiting a 'readable' event emission.
|
||||||
|
this.needReadable = false;
|
||||||
|
this.emittedReadable = false;
|
||||||
|
this.readableListening = false;
|
||||||
|
|
||||||
|
|
||||||
|
// object stream flag. Used to make read(n) ignore n and to
|
||||||
|
// make all the buffer merging and length checks go away
|
||||||
|
this.objectMode = !!options.objectMode;
|
||||||
|
|
||||||
|
if (stream instanceof Duplex)
|
||||||
|
this.objectMode = this.objectMode || !!options.readableObjectMode;
|
||||||
|
|
||||||
|
// Crypto is kind of old and crusty. Historically, its default string
|
||||||
|
// encoding is 'binary' so we have to make this configurable.
|
||||||
|
// Everything else in the universe uses 'utf8', though.
|
||||||
|
this.defaultEncoding = options.defaultEncoding || 'utf8';
|
||||||
|
|
||||||
|
// when piping, we only care about 'readable' events that happen
|
||||||
|
// after read()ing all the bytes and not getting any pushback.
|
||||||
|
this.ranOut = false;
|
||||||
|
|
||||||
|
// the number of writers that are awaiting a drain event in .pipe()s
|
||||||
|
this.awaitDrain = 0;
|
||||||
|
|
||||||
|
// if true, a maybeReadMore has been scheduled
|
||||||
|
this.readingMore = false;
|
||||||
|
|
||||||
|
this.decoder = null;
|
||||||
|
this.encoding = null;
|
||||||
|
if (options.encoding) {
|
||||||
|
if (!StringDecoder)
|
||||||
|
StringDecoder = require('string_decoder/').StringDecoder;
|
||||||
|
this.decoder = new StringDecoder(options.encoding);
|
||||||
|
this.encoding = options.encoding;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Readable(options) {
|
||||||
|
var Duplex = require('./_stream_duplex');
|
||||||
|
|
||||||
|
if (!(this instanceof Readable))
|
||||||
|
return new Readable(options);
|
||||||
|
|
||||||
|
this._readableState = new ReadableState(options, this);
|
||||||
|
|
||||||
|
// legacy
|
||||||
|
this.readable = true;
|
||||||
|
|
||||||
|
Stream.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Manually shove something into the read() buffer.
|
||||||
|
// This returns true if the highWaterMark has not been hit yet,
|
||||||
|
// similar to how Writable.write() returns true if you should
|
||||||
|
// write() some more.
|
||||||
|
Readable.prototype.push = function(chunk, encoding) {
|
||||||
|
var state = this._readableState;
|
||||||
|
|
||||||
|
if (util.isString(chunk) && !state.objectMode) {
|
||||||
|
encoding = encoding || state.defaultEncoding;
|
||||||
|
if (encoding !== state.encoding) {
|
||||||
|
chunk = new Buffer(chunk, encoding);
|
||||||
|
encoding = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return readableAddChunk(this, state, chunk, encoding, false);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Unshift should *always* be something directly out of read()
|
||||||
|
Readable.prototype.unshift = function(chunk) {
|
||||||
|
var state = this._readableState;
|
||||||
|
return readableAddChunk(this, state, chunk, '', true);
|
||||||
|
};
|
||||||
|
|
||||||
|
function readableAddChunk(stream, state, chunk, encoding, addToFront) {
|
||||||
|
var er = chunkInvalid(state, chunk);
|
||||||
|
if (er) {
|
||||||
|
stream.emit('error', er);
|
||||||
|
} else if (util.isNullOrUndefined(chunk)) {
|
||||||
|
state.reading = false;
|
||||||
|
if (!state.ended)
|
||||||
|
onEofChunk(stream, state);
|
||||||
|
} else if (state.objectMode || chunk && chunk.length > 0) {
|
||||||
|
if (state.ended && !addToFront) {
|
||||||
|
var e = new Error('stream.push() after EOF');
|
||||||
|
stream.emit('error', e);
|
||||||
|
} else if (state.endEmitted && addToFront) {
|
||||||
|
var e = new Error('stream.unshift() after end event');
|
||||||
|
stream.emit('error', e);
|
||||||
|
} else {
|
||||||
|
if (state.decoder && !addToFront && !encoding)
|
||||||
|
chunk = state.decoder.write(chunk);
|
||||||
|
|
||||||
|
if (!addToFront)
|
||||||
|
state.reading = false;
|
||||||
|
|
||||||
|
// if we want the data now, just emit it.
|
||||||
|
if (state.flowing && state.length === 0 && !state.sync) {
|
||||||
|
stream.emit('data', chunk);
|
||||||
|
stream.read(0);
|
||||||
|
} else {
|
||||||
|
// update the buffer info.
|
||||||
|
state.length += state.objectMode ? 1 : chunk.length;
|
||||||
|
if (addToFront)
|
||||||
|
state.buffer.unshift(chunk);
|
||||||
|
else
|
||||||
|
state.buffer.push(chunk);
|
||||||
|
|
||||||
|
if (state.needReadable)
|
||||||
|
emitReadable(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
maybeReadMore(stream, state);
|
||||||
|
}
|
||||||
|
} else if (!addToFront) {
|
||||||
|
state.reading = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return needMoreData(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// if it's past the high water mark, we can push in some more.
|
||||||
|
// Also, if we have no data yet, we can stand some
|
||||||
|
// more bytes. This is to work around cases where hwm=0,
|
||||||
|
// such as the repl. Also, if the push() triggered a
|
||||||
|
// readable event, and the user called read(largeNumber) such that
|
||||||
|
// needReadable was set, then we ought to push more, so that another
|
||||||
|
// 'readable' event will be triggered.
|
||||||
|
function needMoreData(state) {
|
||||||
|
return !state.ended &&
|
||||||
|
(state.needReadable ||
|
||||||
|
state.length < state.highWaterMark ||
|
||||||
|
state.length === 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// backwards compatibility.
|
||||||
|
Readable.prototype.setEncoding = function(enc) {
|
||||||
|
if (!StringDecoder)
|
||||||
|
StringDecoder = require('string_decoder/').StringDecoder;
|
||||||
|
this._readableState.decoder = new StringDecoder(enc);
|
||||||
|
this._readableState.encoding = enc;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Don't raise the hwm > 128MB
|
||||||
|
var MAX_HWM = 0x800000;
|
||||||
|
function roundUpToNextPowerOf2(n) {
|
||||||
|
if (n >= MAX_HWM) {
|
||||||
|
n = MAX_HWM;
|
||||||
|
} else {
|
||||||
|
// Get the next highest power of 2
|
||||||
|
n--;
|
||||||
|
for (var p = 1; p < 32; p <<= 1) n |= n >> p;
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
function howMuchToRead(n, state) {
|
||||||
|
if (state.length === 0 && state.ended)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (state.objectMode)
|
||||||
|
return n === 0 ? 0 : 1;
|
||||||
|
|
||||||
|
if (isNaN(n) || util.isNull(n)) {
|
||||||
|
// only flow one buffer at a time
|
||||||
|
if (state.flowing && state.buffer.length)
|
||||||
|
return state.buffer[0].length;
|
||||||
|
else
|
||||||
|
return state.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (n <= 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// If we're asking for more than the target buffer level,
|
||||||
|
// then raise the water mark. Bump up to the next highest
|
||||||
|
// power of 2, to prevent increasing it excessively in tiny
|
||||||
|
// amounts.
|
||||||
|
if (n > state.highWaterMark)
|
||||||
|
state.highWaterMark = roundUpToNextPowerOf2(n);
|
||||||
|
|
||||||
|
// don't have that much. return null, unless we've ended.
|
||||||
|
if (n > state.length) {
|
||||||
|
if (!state.ended) {
|
||||||
|
state.needReadable = true;
|
||||||
|
return 0;
|
||||||
|
} else
|
||||||
|
return state.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
// you can override either this method, or the async _read(n) below.
|
||||||
|
Readable.prototype.read = function(n) {
|
||||||
|
debug('read', n);
|
||||||
|
var state = this._readableState;
|
||||||
|
var nOrig = n;
|
||||||
|
|
||||||
|
if (!util.isNumber(n) || n > 0)
|
||||||
|
state.emittedReadable = false;
|
||||||
|
|
||||||
|
// if we're doing read(0) to trigger a readable event, but we
|
||||||
|
// already have a bunch of data in the buffer, then just trigger
|
||||||
|
// the 'readable' event and move on.
|
||||||
|
if (n === 0 &&
|
||||||
|
state.needReadable &&
|
||||||
|
(state.length >= state.highWaterMark || state.ended)) {
|
||||||
|
debug('read: emitReadable', state.length, state.ended);
|
||||||
|
if (state.length === 0 && state.ended)
|
||||||
|
endReadable(this);
|
||||||
|
else
|
||||||
|
emitReadable(this);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
n = howMuchToRead(n, state);
|
||||||
|
|
||||||
|
// if we've ended, and we're now clear, then finish it up.
|
||||||
|
if (n === 0 && state.ended) {
|
||||||
|
if (state.length === 0)
|
||||||
|
endReadable(this);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// All the actual chunk generation logic needs to be
|
||||||
|
// *below* the call to _read. The reason is that in certain
|
||||||
|
// synthetic stream cases, such as passthrough streams, _read
|
||||||
|
// may be a completely synchronous operation which may change
|
||||||
|
// the state of the read buffer, providing enough data when
|
||||||
|
// before there was *not* enough.
|
||||||
|
//
|
||||||
|
// So, the steps are:
|
||||||
|
// 1. Figure out what the state of things will be after we do
|
||||||
|
// a read from the buffer.
|
||||||
|
//
|
||||||
|
// 2. If that resulting state will trigger a _read, then call _read.
|
||||||
|
// Note that this may be asynchronous, or synchronous. Yes, it is
|
||||||
|
// deeply ugly to write APIs this way, but that still doesn't mean
|
||||||
|
// that the Readable class should behave improperly, as streams are
|
||||||
|
// designed to be sync/async agnostic.
|
||||||
|
// Take note if the _read call is sync or async (ie, if the read call
|
||||||
|
// has returned yet), so that we know whether or not it's safe to emit
|
||||||
|
// 'readable' etc.
|
||||||
|
//
|
||||||
|
// 3. Actually pull the requested chunks out of the buffer and return.
|
||||||
|
|
||||||
|
// if we need a readable event, then we need to do some reading.
|
||||||
|
var doRead = state.needReadable;
|
||||||
|
debug('need readable', doRead);
|
||||||
|
|
||||||
|
// if we currently have less than the highWaterMark, then also read some
|
||||||
|
if (state.length === 0 || state.length - n < state.highWaterMark) {
|
||||||
|
doRead = true;
|
||||||
|
debug('length less than watermark', doRead);
|
||||||
|
}
|
||||||
|
|
||||||
|
// however, if we've ended, then there's no point, and if we're already
|
||||||
|
// reading, then it's unnecessary.
|
||||||
|
if (state.ended || state.reading) {
|
||||||
|
doRead = false;
|
||||||
|
debug('reading or ended', doRead);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (doRead) {
|
||||||
|
debug('do read');
|
||||||
|
state.reading = true;
|
||||||
|
state.sync = true;
|
||||||
|
// if the length is currently zero, then we *need* a readable event.
|
||||||
|
if (state.length === 0)
|
||||||
|
state.needReadable = true;
|
||||||
|
// call internal read method
|
||||||
|
this._read(state.highWaterMark);
|
||||||
|
state.sync = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If _read pushed data synchronously, then `reading` will be false,
|
||||||
|
// and we need to re-evaluate how much data we can return to the user.
|
||||||
|
if (doRead && !state.reading)
|
||||||
|
n = howMuchToRead(nOrig, state);
|
||||||
|
|
||||||
|
var ret;
|
||||||
|
if (n > 0)
|
||||||
|
ret = fromList(n, state);
|
||||||
|
else
|
||||||
|
ret = null;
|
||||||
|
|
||||||
|
if (util.isNull(ret)) {
|
||||||
|
state.needReadable = true;
|
||||||
|
n = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
state.length -= n;
|
||||||
|
|
||||||
|
// If we have nothing in the buffer, then we want to know
|
||||||
|
// as soon as we *do* get something into the buffer.
|
||||||
|
if (state.length === 0 && !state.ended)
|
||||||
|
state.needReadable = true;
|
||||||
|
|
||||||
|
// If we tried to read() past the EOF, then emit end on the next tick.
|
||||||
|
if (nOrig !== n && state.ended && state.length === 0)
|
||||||
|
endReadable(this);
|
||||||
|
|
||||||
|
if (!util.isNull(ret))
|
||||||
|
this.emit('data', ret);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
};
|
||||||
|
|
||||||
|
function chunkInvalid(state, chunk) {
|
||||||
|
var er = null;
|
||||||
|
if (!util.isBuffer(chunk) &&
|
||||||
|
!util.isString(chunk) &&
|
||||||
|
!util.isNullOrUndefined(chunk) &&
|
||||||
|
!state.objectMode) {
|
||||||
|
er = new TypeError('Invalid non-string/buffer chunk');
|
||||||
|
}
|
||||||
|
return er;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function onEofChunk(stream, state) {
|
||||||
|
if (state.decoder && !state.ended) {
|
||||||
|
var chunk = state.decoder.end();
|
||||||
|
if (chunk && chunk.length) {
|
||||||
|
state.buffer.push(chunk);
|
||||||
|
state.length += state.objectMode ? 1 : chunk.length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
state.ended = true;
|
||||||
|
|
||||||
|
// emit 'readable' now to make sure it gets picked up.
|
||||||
|
emitReadable(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't emit readable right away in sync mode, because this can trigger
|
||||||
|
// another read() call => stack overflow. This way, it might trigger
|
||||||
|
// a nextTick recursion warning, but that's not so bad.
|
||||||
|
function emitReadable(stream) {
|
||||||
|
var state = stream._readableState;
|
||||||
|
state.needReadable = false;
|
||||||
|
if (!state.emittedReadable) {
|
||||||
|
debug('emitReadable', state.flowing);
|
||||||
|
state.emittedReadable = true;
|
||||||
|
if (state.sync)
|
||||||
|
process.nextTick(function() {
|
||||||
|
emitReadable_(stream);
|
||||||
|
});
|
||||||
|
else
|
||||||
|
emitReadable_(stream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function emitReadable_(stream) {
|
||||||
|
debug('emit readable');
|
||||||
|
stream.emit('readable');
|
||||||
|
flow(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// at this point, the user has presumably seen the 'readable' event,
|
||||||
|
// and called read() to consume some data. that may have triggered
|
||||||
|
// in turn another _read(n) call, in which case reading = true if
|
||||||
|
// it's in progress.
|
||||||
|
// However, if we're not ended, or reading, and the length < hwm,
|
||||||
|
// then go ahead and try to read some more preemptively.
|
||||||
|
function maybeReadMore(stream, state) {
|
||||||
|
if (!state.readingMore) {
|
||||||
|
state.readingMore = true;
|
||||||
|
process.nextTick(function() {
|
||||||
|
maybeReadMore_(stream, state);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function maybeReadMore_(stream, state) {
|
||||||
|
var len = state.length;
|
||||||
|
while (!state.reading && !state.flowing && !state.ended &&
|
||||||
|
state.length < state.highWaterMark) {
|
||||||
|
debug('maybeReadMore read 0');
|
||||||
|
stream.read(0);
|
||||||
|
if (len === state.length)
|
||||||
|
// didn't get any data, stop spinning.
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
len = state.length;
|
||||||
|
}
|
||||||
|
state.readingMore = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// abstract method. to be overridden in specific implementation classes.
|
||||||
|
// call cb(er, data) where data is <= n in length.
|
||||||
|
// for virtual (non-string, non-buffer) streams, "length" is somewhat
|
||||||
|
// arbitrary, and perhaps not very meaningful.
|
||||||
|
Readable.prototype._read = function(n) {
|
||||||
|
this.emit('error', new Error('not implemented'));
|
||||||
|
};
|
||||||
|
|
||||||
|
Readable.prototype.pipe = function(dest, pipeOpts) {
|
||||||
|
var src = this;
|
||||||
|
var state = this._readableState;
|
||||||
|
|
||||||
|
switch (state.pipesCount) {
|
||||||
|
case 0:
|
||||||
|
state.pipes = dest;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
state.pipes = [state.pipes, dest];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
state.pipes.push(dest);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
state.pipesCount += 1;
|
||||||
|
debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
|
||||||
|
|
||||||
|
var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
|
||||||
|
dest !== process.stdout &&
|
||||||
|
dest !== process.stderr;
|
||||||
|
|
||||||
|
var endFn = doEnd ? onend : cleanup;
|
||||||
|
if (state.endEmitted)
|
||||||
|
process.nextTick(endFn);
|
||||||
|
else
|
||||||
|
src.once('end', endFn);
|
||||||
|
|
||||||
|
dest.on('unpipe', onunpipe);
|
||||||
|
function onunpipe(readable) {
|
||||||
|
debug('onunpipe');
|
||||||
|
if (readable === src) {
|
||||||
|
cleanup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function onend() {
|
||||||
|
debug('onend');
|
||||||
|
dest.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
// when the dest drains, it reduces the awaitDrain counter
|
||||||
|
// on the source. This would be more elegant with a .once()
|
||||||
|
// handler in flow(), but adding and removing repeatedly is
|
||||||
|
// too slow.
|
||||||
|
var ondrain = pipeOnDrain(src);
|
||||||
|
dest.on('drain', ondrain);
|
||||||
|
|
||||||
|
function cleanup() {
|
||||||
|
debug('cleanup');
|
||||||
|
// cleanup event handlers once the pipe is broken
|
||||||
|
dest.removeListener('close', onclose);
|
||||||
|
dest.removeListener('finish', onfinish);
|
||||||
|
dest.removeListener('drain', ondrain);
|
||||||
|
dest.removeListener('error', onerror);
|
||||||
|
dest.removeListener('unpipe', onunpipe);
|
||||||
|
src.removeListener('end', onend);
|
||||||
|
src.removeListener('end', cleanup);
|
||||||
|
src.removeListener('data', ondata);
|
||||||
|
|
||||||
|
// if the reader is waiting for a drain event from this
|
||||||
|
// specific writer, then it would cause it to never start
|
||||||
|
// flowing again.
|
||||||
|
// So, if this is awaiting a drain, then we just call it now.
|
||||||
|
// If we don't know, then assume that we are waiting for one.
|
||||||
|
if (state.awaitDrain &&
|
||||||
|
(!dest._writableState || dest._writableState.needDrain))
|
||||||
|
ondrain();
|
||||||
|
}
|
||||||
|
|
||||||
|
src.on('data', ondata);
|
||||||
|
function ondata(chunk) {
|
||||||
|
debug('ondata');
|
||||||
|
var ret = dest.write(chunk);
|
||||||
|
if (false === ret) {
|
||||||
|
debug('false write response, pause',
|
||||||
|
src._readableState.awaitDrain);
|
||||||
|
src._readableState.awaitDrain++;
|
||||||
|
src.pause();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the dest has an error, then stop piping into it.
|
||||||
|
// however, don't suppress the throwing behavior for this.
|
||||||
|
function onerror(er) {
|
||||||
|
debug('onerror', er);
|
||||||
|
unpipe();
|
||||||
|
dest.removeListener('error', onerror);
|
||||||
|
if (EE.listenerCount(dest, 'error') === 0)
|
||||||
|
dest.emit('error', er);
|
||||||
|
}
|
||||||
|
// This is a brutally ugly hack to make sure that our error handler
|
||||||
|
// is attached before any userland ones. NEVER DO THIS.
|
||||||
|
if (!dest._events || !dest._events.error)
|
||||||
|
dest.on('error', onerror);
|
||||||
|
else if (isArray(dest._events.error))
|
||||||
|
dest._events.error.unshift(onerror);
|
||||||
|
else
|
||||||
|
dest._events.error = [onerror, dest._events.error];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Both close and finish should trigger unpipe, but only once.
|
||||||
|
function onclose() {
|
||||||
|
dest.removeListener('finish', onfinish);
|
||||||
|
unpipe();
|
||||||
|
}
|
||||||
|
dest.once('close', onclose);
|
||||||
|
function onfinish() {
|
||||||
|
debug('onfinish');
|
||||||
|
dest.removeListener('close', onclose);
|
||||||
|
unpipe();
|
||||||
|
}
|
||||||
|
dest.once('finish', onfinish);
|
||||||
|
|
||||||
|
function unpipe() {
|
||||||
|
debug('unpipe');
|
||||||
|
src.unpipe(dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
// tell the dest that it's being piped to
|
||||||
|
dest.emit('pipe', src);
|
||||||
|
|
||||||
|
// start the flow if it hasn't been started already.
|
||||||
|
if (!state.flowing) {
|
||||||
|
debug('pipe resume');
|
||||||
|
src.resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
};
|
||||||
|
|
||||||
|
function pipeOnDrain(src) {
|
||||||
|
return function() {
|
||||||
|
var state = src._readableState;
|
||||||
|
debug('pipeOnDrain', state.awaitDrain);
|
||||||
|
if (state.awaitDrain)
|
||||||
|
state.awaitDrain--;
|
||||||
|
if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
|
||||||
|
state.flowing = true;
|
||||||
|
flow(src);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Readable.prototype.unpipe = function(dest) {
|
||||||
|
var state = this._readableState;
|
||||||
|
|
||||||
|
// if we're not piping anywhere, then do nothing.
|
||||||
|
if (state.pipesCount === 0)
|
||||||
|
return this;
|
||||||
|
|
||||||
|
// just one destination. most common case.
|
||||||
|
if (state.pipesCount === 1) {
|
||||||
|
// passed in one, but it's not the right one.
|
||||||
|
if (dest && dest !== state.pipes)
|
||||||
|
return this;
|
||||||
|
|
||||||
|
if (!dest)
|
||||||
|
dest = state.pipes;
|
||||||
|
|
||||||
|
// got a match.
|
||||||
|
state.pipes = null;
|
||||||
|
state.pipesCount = 0;
|
||||||
|
state.flowing = false;
|
||||||
|
if (dest)
|
||||||
|
dest.emit('unpipe', this);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// slow case. multiple pipe destinations.
|
||||||
|
|
||||||
|
if (!dest) {
|
||||||
|
// remove all.
|
||||||
|
var dests = state.pipes;
|
||||||
|
var len = state.pipesCount;
|
||||||
|
state.pipes = null;
|
||||||
|
state.pipesCount = 0;
|
||||||
|
state.flowing = false;
|
||||||
|
|
||||||
|
for (var i = 0; i < len; i++)
|
||||||
|
dests[i].emit('unpipe', this);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// try to find the right one.
|
||||||
|
var i = indexOf(state.pipes, dest);
|
||||||
|
if (i === -1)
|
||||||
|
return this;
|
||||||
|
|
||||||
|
state.pipes.splice(i, 1);
|
||||||
|
state.pipesCount -= 1;
|
||||||
|
if (state.pipesCount === 1)
|
||||||
|
state.pipes = state.pipes[0];
|
||||||
|
|
||||||
|
dest.emit('unpipe', this);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
// set up data events if they are asked for
|
||||||
|
// Ensure readable listeners eventually get something
|
||||||
|
Readable.prototype.on = function(ev, fn) {
|
||||||
|
var res = Stream.prototype.on.call(this, ev, fn);
|
||||||
|
|
||||||
|
// If listening to data, and it has not explicitly been paused,
|
||||||
|
// then call resume to start the flow of data on the next tick.
|
||||||
|
if (ev === 'data' && false !== this._readableState.flowing) {
|
||||||
|
this.resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ev === 'readable' && this.readable) {
|
||||||
|
var state = this._readableState;
|
||||||
|
if (!state.readableListening) {
|
||||||
|
state.readableListening = true;
|
||||||
|
state.emittedReadable = false;
|
||||||
|
state.needReadable = true;
|
||||||
|
if (!state.reading) {
|
||||||
|
var self = this;
|
||||||
|
process.nextTick(function() {
|
||||||
|
debug('readable nexttick read 0');
|
||||||
|
self.read(0);
|
||||||
|
});
|
||||||
|
} else if (state.length) {
|
||||||
|
emitReadable(this, state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
Readable.prototype.addListener = Readable.prototype.on;
|
||||||
|
|
||||||
|
// pause() and resume() are remnants of the legacy readable stream API
|
||||||
|
// If the user uses them, then switch into old mode.
|
||||||
|
Readable.prototype.resume = function() {
|
||||||
|
var state = this._readableState;
|
||||||
|
if (!state.flowing) {
|
||||||
|
debug('resume');
|
||||||
|
state.flowing = true;
|
||||||
|
if (!state.reading) {
|
||||||
|
debug('resume read 0');
|
||||||
|
this.read(0);
|
||||||
|
}
|
||||||
|
resume(this, state);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
function resume(stream, state) {
|
||||||
|
if (!state.resumeScheduled) {
|
||||||
|
state.resumeScheduled = true;
|
||||||
|
process.nextTick(function() {
|
||||||
|
resume_(stream, state);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function resume_(stream, state) {
|
||||||
|
state.resumeScheduled = false;
|
||||||
|
stream.emit('resume');
|
||||||
|
flow(stream);
|
||||||
|
if (state.flowing && !state.reading)
|
||||||
|
stream.read(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Readable.prototype.pause = function() {
|
||||||
|
debug('call pause flowing=%j', this._readableState.flowing);
|
||||||
|
if (false !== this._readableState.flowing) {
|
||||||
|
debug('pause');
|
||||||
|
this._readableState.flowing = false;
|
||||||
|
this.emit('pause');
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
function flow(stream) {
|
||||||
|
var state = stream._readableState;
|
||||||
|
debug('flow', state.flowing);
|
||||||
|
if (state.flowing) {
|
||||||
|
do {
|
||||||
|
var chunk = stream.read();
|
||||||
|
} while (null !== chunk && state.flowing);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// wrap an old-style stream as the async data source.
|
||||||
|
// This is *not* part of the readable stream interface.
|
||||||
|
// It is an ugly unfortunate mess of history.
|
||||||
|
Readable.prototype.wrap = function(stream) {
|
||||||
|
var state = this._readableState;
|
||||||
|
var paused = false;
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
stream.on('end', function() {
|
||||||
|
debug('wrapped end');
|
||||||
|
if (state.decoder && !state.ended) {
|
||||||
|
var chunk = state.decoder.end();
|
||||||
|
if (chunk && chunk.length)
|
||||||
|
self.push(chunk);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.push(null);
|
||||||
|
});
|
||||||
|
|
||||||
|
stream.on('data', function(chunk) {
|
||||||
|
debug('wrapped data');
|
||||||
|
if (state.decoder)
|
||||||
|
chunk = state.decoder.write(chunk);
|
||||||
|
if (!chunk || !state.objectMode && !chunk.length)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var ret = self.push(chunk);
|
||||||
|
if (!ret) {
|
||||||
|
paused = true;
|
||||||
|
stream.pause();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// proxy all the other methods.
|
||||||
|
// important when wrapping filters and duplexes.
|
||||||
|
for (var i in stream) {
|
||||||
|
if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
|
||||||
|
this[i] = function(method) { return function() {
|
||||||
|
return stream[method].apply(stream, arguments);
|
||||||
|
}}(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// proxy certain important events.
|
||||||
|
var events = ['error', 'close', 'destroy', 'pause', 'resume'];
|
||||||
|
forEach(events, function(ev) {
|
||||||
|
stream.on(ev, self.emit.bind(self, ev));
|
||||||
|
});
|
||||||
|
|
||||||
|
// when we try to consume some more bytes, simply unpause the
|
||||||
|
// underlying stream.
|
||||||
|
self._read = function(n) {
|
||||||
|
debug('wrapped _read', n);
|
||||||
|
if (paused) {
|
||||||
|
paused = false;
|
||||||
|
stream.resume();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return self;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// exposed for testing purposes only.
|
||||||
|
Readable._fromList = fromList;
|
||||||
|
|
||||||
|
// Pluck off n bytes from an array of buffers.
|
||||||
|
// Length is the combined lengths of all the buffers in the list.
|
||||||
|
function fromList(n, state) {
|
||||||
|
var list = state.buffer;
|
||||||
|
var length = state.length;
|
||||||
|
var stringMode = !!state.decoder;
|
||||||
|
var objectMode = !!state.objectMode;
|
||||||
|
var ret;
|
||||||
|
|
||||||
|
// nothing in the list, definitely empty.
|
||||||
|
if (list.length === 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if (length === 0)
|
||||||
|
ret = null;
|
||||||
|
else if (objectMode)
|
||||||
|
ret = list.shift();
|
||||||
|
else if (!n || n >= length) {
|
||||||
|
// read it all, truncate the array.
|
||||||
|
if (stringMode)
|
||||||
|
ret = list.join('');
|
||||||
|
else
|
||||||
|
ret = Buffer.concat(list, length);
|
||||||
|
list.length = 0;
|
||||||
|
} else {
|
||||||
|
// read just some of it.
|
||||||
|
if (n < list[0].length) {
|
||||||
|
// just take a part of the first list item.
|
||||||
|
// slice is the same for buffers and strings.
|
||||||
|
var buf = list[0];
|
||||||
|
ret = buf.slice(0, n);
|
||||||
|
list[0] = buf.slice(n);
|
||||||
|
} else if (n === list[0].length) {
|
||||||
|
// first list is a perfect match
|
||||||
|
ret = list.shift();
|
||||||
|
} else {
|
||||||
|
// complex case.
|
||||||
|
// we have enough to cover it, but it spans past the first buffer.
|
||||||
|
if (stringMode)
|
||||||
|
ret = '';
|
||||||
|
else
|
||||||
|
ret = new Buffer(n);
|
||||||
|
|
||||||
|
var c = 0;
|
||||||
|
for (var i = 0, l = list.length; i < l && c < n; i++) {
|
||||||
|
var buf = list[0];
|
||||||
|
var cpy = Math.min(n - c, buf.length);
|
||||||
|
|
||||||
|
if (stringMode)
|
||||||
|
ret += buf.slice(0, cpy);
|
||||||
|
else
|
||||||
|
buf.copy(ret, c, 0, cpy);
|
||||||
|
|
||||||
|
if (cpy < buf.length)
|
||||||
|
list[0] = buf.slice(cpy);
|
||||||
|
else
|
||||||
|
list.shift();
|
||||||
|
|
||||||
|
c += cpy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
function endReadable(stream) {
|
||||||
|
var state = stream._readableState;
|
||||||
|
|
||||||
|
// If we get here before consuming all the bytes, then that is a
|
||||||
|
// bug in node. Should never happen.
|
||||||
|
if (state.length > 0)
|
||||||
|
throw new Error('endReadable called on non-empty stream');
|
||||||
|
|
||||||
|
if (!state.endEmitted) {
|
||||||
|
state.ended = true;
|
||||||
|
process.nextTick(function() {
|
||||||
|
// Check that we didn't get one last unshift.
|
||||||
|
if (!state.endEmitted && state.length === 0) {
|
||||||
|
state.endEmitted = true;
|
||||||
|
stream.readable = false;
|
||||||
|
stream.emit('end');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function forEach (xs, f) {
|
||||||
|
for (var i = 0, l = xs.length; i < l; i++) {
|
||||||
|
f(xs[i], i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function indexOf (xs, x) {
|
||||||
|
for (var i = 0, l = xs.length; i < l; i++) {
|
||||||
|
if (xs[i] === x) return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
209
src/node_modules/insert-module-globals/node_modules/readable-stream/lib/_stream_transform.js
generated
vendored
Normal file
209
src/node_modules/insert-module-globals/node_modules/readable-stream/lib/_stream_transform.js
generated
vendored
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
// Copyright Joyent, Inc. and other Node contributors.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
// copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||||
|
// persons to whom the Software is furnished to do so, subject to the
|
||||||
|
// following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||||
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
// a transform stream is a readable/writable stream where you do
|
||||||
|
// something with the data. Sometimes it's called a "filter",
|
||||||
|
// but that's not a great name for it, since that implies a thing where
|
||||||
|
// some bits pass through, and others are simply ignored. (That would
|
||||||
|
// be a valid example of a transform, of course.)
|
||||||
|
//
|
||||||
|
// While the output is causally related to the input, it's not a
|
||||||
|
// necessarily symmetric or synchronous transformation. For example,
|
||||||
|
// a zlib stream might take multiple plain-text writes(), and then
|
||||||
|
// emit a single compressed chunk some time in the future.
|
||||||
|
//
|
||||||
|
// Here's how this works:
|
||||||
|
//
|
||||||
|
// The Transform stream has all the aspects of the readable and writable
|
||||||
|
// stream classes. When you write(chunk), that calls _write(chunk,cb)
|
||||||
|
// internally, and returns false if there's a lot of pending writes
|
||||||
|
// buffered up. When you call read(), that calls _read(n) until
|
||||||
|
// there's enough pending readable data buffered up.
|
||||||
|
//
|
||||||
|
// In a transform stream, the written data is placed in a buffer. When
|
||||||
|
// _read(n) is called, it transforms the queued up data, calling the
|
||||||
|
// buffered _write cb's as it consumes chunks. If consuming a single
|
||||||
|
// written chunk would result in multiple output chunks, then the first
|
||||||
|
// outputted bit calls the readcb, and subsequent chunks just go into
|
||||||
|
// the read buffer, and will cause it to emit 'readable' if necessary.
|
||||||
|
//
|
||||||
|
// This way, back-pressure is actually determined by the reading side,
|
||||||
|
// since _read has to be called to start processing a new chunk. However,
|
||||||
|
// a pathological inflate type of transform can cause excessive buffering
|
||||||
|
// here. For example, imagine a stream where every byte of input is
|
||||||
|
// interpreted as an integer from 0-255, and then results in that many
|
||||||
|
// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
|
||||||
|
// 1kb of data being output. In this case, you could write a very small
|
||||||
|
// amount of input, and end up with a very large amount of output. In
|
||||||
|
// such a pathological inflating mechanism, there'd be no way to tell
|
||||||
|
// the system to stop doing the transform. A single 4MB write could
|
||||||
|
// cause the system to run out of memory.
|
||||||
|
//
|
||||||
|
// However, even in such a pathological case, only a single written chunk
|
||||||
|
// would be consumed, and then the rest would wait (un-transformed) until
|
||||||
|
// the results of the previous transformed chunk were consumed.
|
||||||
|
|
||||||
|
module.exports = Transform;
|
||||||
|
|
||||||
|
var Duplex = require('./_stream_duplex');
|
||||||
|
|
||||||
|
/*<replacement>*/
|
||||||
|
var util = require('core-util-is');
|
||||||
|
util.inherits = require('inherits');
|
||||||
|
/*</replacement>*/
|
||||||
|
|
||||||
|
util.inherits(Transform, Duplex);
|
||||||
|
|
||||||
|
|
||||||
|
function TransformState(options, stream) {
|
||||||
|
this.afterTransform = function(er, data) {
|
||||||
|
return afterTransform(stream, er, data);
|
||||||
|
};
|
||||||
|
|
||||||
|
this.needTransform = false;
|
||||||
|
this.transforming = false;
|
||||||
|
this.writecb = null;
|
||||||
|
this.writechunk = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function afterTransform(stream, er, data) {
|
||||||
|
var ts = stream._transformState;
|
||||||
|
ts.transforming = false;
|
||||||
|
|
||||||
|
var cb = ts.writecb;
|
||||||
|
|
||||||
|
if (!cb)
|
||||||
|
return stream.emit('error', new Error('no writecb in Transform class'));
|
||||||
|
|
||||||
|
ts.writechunk = null;
|
||||||
|
ts.writecb = null;
|
||||||
|
|
||||||
|
if (!util.isNullOrUndefined(data))
|
||||||
|
stream.push(data);
|
||||||
|
|
||||||
|
if (cb)
|
||||||
|
cb(er);
|
||||||
|
|
||||||
|
var rs = stream._readableState;
|
||||||
|
rs.reading = false;
|
||||||
|
if (rs.needReadable || rs.length < rs.highWaterMark) {
|
||||||
|
stream._read(rs.highWaterMark);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function Transform(options) {
|
||||||
|
if (!(this instanceof Transform))
|
||||||
|
return new Transform(options);
|
||||||
|
|
||||||
|
Duplex.call(this, options);
|
||||||
|
|
||||||
|
this._transformState = new TransformState(options, this);
|
||||||
|
|
||||||
|
// when the writable side finishes, then flush out anything remaining.
|
||||||
|
var stream = this;
|
||||||
|
|
||||||
|
// start out asking for a readable event once data is transformed.
|
||||||
|
this._readableState.needReadable = true;
|
||||||
|
|
||||||
|
// we have implemented the _read method, and done the other things
|
||||||
|
// that Readable wants before the first _read call, so unset the
|
||||||
|
// sync guard flag.
|
||||||
|
this._readableState.sync = false;
|
||||||
|
|
||||||
|
this.once('prefinish', function() {
|
||||||
|
if (util.isFunction(this._flush))
|
||||||
|
this._flush(function(er) {
|
||||||
|
done(stream, er);
|
||||||
|
});
|
||||||
|
else
|
||||||
|
done(stream);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Transform.prototype.push = function(chunk, encoding) {
|
||||||
|
this._transformState.needTransform = false;
|
||||||
|
return Duplex.prototype.push.call(this, chunk, encoding);
|
||||||
|
};
|
||||||
|
|
||||||
|
// This is the part where you do stuff!
|
||||||
|
// override this function in implementation classes.
|
||||||
|
// 'chunk' is an input chunk.
|
||||||
|
//
|
||||||
|
// Call `push(newChunk)` to pass along transformed output
|
||||||
|
// to the readable side. You may call 'push' zero or more times.
|
||||||
|
//
|
||||||
|
// Call `cb(err)` when you are done with this chunk. If you pass
|
||||||
|
// an error, then that'll put the hurt on the whole operation. If you
|
||||||
|
// never call cb(), then you'll never get another chunk.
|
||||||
|
Transform.prototype._transform = function(chunk, encoding, cb) {
|
||||||
|
throw new Error('not implemented');
|
||||||
|
};
|
||||||
|
|
||||||
|
Transform.prototype._write = function(chunk, encoding, cb) {
|
||||||
|
var ts = this._transformState;
|
||||||
|
ts.writecb = cb;
|
||||||
|
ts.writechunk = chunk;
|
||||||
|
ts.writeencoding = encoding;
|
||||||
|
if (!ts.transforming) {
|
||||||
|
var rs = this._readableState;
|
||||||
|
if (ts.needTransform ||
|
||||||
|
rs.needReadable ||
|
||||||
|
rs.length < rs.highWaterMark)
|
||||||
|
this._read(rs.highWaterMark);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Doesn't matter what the args are here.
|
||||||
|
// _transform does all the work.
|
||||||
|
// That we got here means that the readable side wants more data.
|
||||||
|
Transform.prototype._read = function(n) {
|
||||||
|
var ts = this._transformState;
|
||||||
|
|
||||||
|
if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
|
||||||
|
ts.transforming = true;
|
||||||
|
this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
|
||||||
|
} else {
|
||||||
|
// mark that we need a transform, so that any data that comes in
|
||||||
|
// will get processed, now that we've asked for it.
|
||||||
|
ts.needTransform = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function done(stream, er) {
|
||||||
|
if (er)
|
||||||
|
return stream.emit('error', er);
|
||||||
|
|
||||||
|
// if there's nothing in the write buffer, then that means
|
||||||
|
// that nothing more will ever be provided
|
||||||
|
var ws = stream._writableState;
|
||||||
|
var ts = stream._transformState;
|
||||||
|
|
||||||
|
if (ws.length)
|
||||||
|
throw new Error('calling transform done when ws.length != 0');
|
||||||
|
|
||||||
|
if (ts.transforming)
|
||||||
|
throw new Error('calling transform done when still transforming');
|
||||||
|
|
||||||
|
return stream.push(null);
|
||||||
|
}
|
477
src/node_modules/insert-module-globals/node_modules/readable-stream/lib/_stream_writable.js
generated
vendored
Normal file
477
src/node_modules/insert-module-globals/node_modules/readable-stream/lib/_stream_writable.js
generated
vendored
Normal file
@ -0,0 +1,477 @@
|
|||||||
|
// Copyright Joyent, Inc. and other Node contributors.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
// copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||||
|
// persons to whom the Software is furnished to do so, subject to the
|
||||||
|
// following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||||
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
// A bit simpler than readable streams.
|
||||||
|
// Implement an async ._write(chunk, cb), and it'll handle all
|
||||||
|
// the drain event emission and buffering.
|
||||||
|
|
||||||
|
module.exports = Writable;
|
||||||
|
|
||||||
|
/*<replacement>*/
|
||||||
|
var Buffer = require('buffer').Buffer;
|
||||||
|
/*</replacement>*/
|
||||||
|
|
||||||
|
Writable.WritableState = WritableState;
|
||||||
|
|
||||||
|
|
||||||
|
/*<replacement>*/
|
||||||
|
var util = require('core-util-is');
|
||||||
|
util.inherits = require('inherits');
|
||||||
|
/*</replacement>*/
|
||||||
|
|
||||||
|
var Stream = require('stream');
|
||||||
|
|
||||||
|
util.inherits(Writable, Stream);
|
||||||
|
|
||||||
|
function WriteReq(chunk, encoding, cb) {
|
||||||
|
this.chunk = chunk;
|
||||||
|
this.encoding = encoding;
|
||||||
|
this.callback = cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
function WritableState(options, stream) {
|
||||||
|
var Duplex = require('./_stream_duplex');
|
||||||
|
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
// the point at which write() starts returning false
|
||||||
|
// Note: 0 is a valid value, means that we always return false if
|
||||||
|
// the entire buffer is not flushed immediately on write()
|
||||||
|
var hwm = options.highWaterMark;
|
||||||
|
var defaultHwm = options.objectMode ? 16 : 16 * 1024;
|
||||||
|
this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
|
||||||
|
|
||||||
|
// object stream flag to indicate whether or not this stream
|
||||||
|
// contains buffers or objects.
|
||||||
|
this.objectMode = !!options.objectMode;
|
||||||
|
|
||||||
|
if (stream instanceof Duplex)
|
||||||
|
this.objectMode = this.objectMode || !!options.writableObjectMode;
|
||||||
|
|
||||||
|
// cast to ints.
|
||||||
|
this.highWaterMark = ~~this.highWaterMark;
|
||||||
|
|
||||||
|
this.needDrain = false;
|
||||||
|
// at the start of calling end()
|
||||||
|
this.ending = false;
|
||||||
|
// when end() has been called, and returned
|
||||||
|
this.ended = false;
|
||||||
|
// when 'finish' is emitted
|
||||||
|
this.finished = false;
|
||||||
|
|
||||||
|
// should we decode strings into buffers before passing to _write?
|
||||||
|
// this is here so that some node-core streams can optimize string
|
||||||
|
// handling at a lower level.
|
||||||
|
var noDecode = options.decodeStrings === false;
|
||||||
|
this.decodeStrings = !noDecode;
|
||||||
|
|
||||||
|
// Crypto is kind of old and crusty. Historically, its default string
|
||||||
|
// encoding is 'binary' so we have to make this configurable.
|
||||||
|
// Everything else in the universe uses 'utf8', though.
|
||||||
|
this.defaultEncoding = options.defaultEncoding || 'utf8';
|
||||||
|
|
||||||
|
// not an actual buffer we keep track of, but a measurement
|
||||||
|
// of how much we're waiting to get pushed to some underlying
|
||||||
|
// socket or file.
|
||||||
|
this.length = 0;
|
||||||
|
|
||||||
|
// a flag to see when we're in the middle of a write.
|
||||||
|
this.writing = false;
|
||||||
|
|
||||||
|
// when true all writes will be buffered until .uncork() call
|
||||||
|
this.corked = 0;
|
||||||
|
|
||||||
|
// a flag to be able to tell if the onwrite cb is called immediately,
|
||||||
|
// or on a later tick. We set this to true at first, because any
|
||||||
|
// actions that shouldn't happen until "later" should generally also
|
||||||
|
// not happen before the first write call.
|
||||||
|
this.sync = true;
|
||||||
|
|
||||||
|
// a flag to know if we're processing previously buffered items, which
|
||||||
|
// may call the _write() callback in the same tick, so that we don't
|
||||||
|
// end up in an overlapped onwrite situation.
|
||||||
|
this.bufferProcessing = false;
|
||||||
|
|
||||||
|
// the callback that's passed to _write(chunk,cb)
|
||||||
|
this.onwrite = function(er) {
|
||||||
|
onwrite(stream, er);
|
||||||
|
};
|
||||||
|
|
||||||
|
// the callback that the user supplies to write(chunk,encoding,cb)
|
||||||
|
this.writecb = null;
|
||||||
|
|
||||||
|
// the amount that is being written when _write is called.
|
||||||
|
this.writelen = 0;
|
||||||
|
|
||||||
|
this.buffer = [];
|
||||||
|
|
||||||
|
// number of pending user-supplied write callbacks
|
||||||
|
// this must be 0 before 'finish' can be emitted
|
||||||
|
this.pendingcb = 0;
|
||||||
|
|
||||||
|
// emit prefinish if the only thing we're waiting for is _write cbs
|
||||||
|
// This is relevant for synchronous Transform streams
|
||||||
|
this.prefinished = false;
|
||||||
|
|
||||||
|
// True if the error was already emitted and should not be thrown again
|
||||||
|
this.errorEmitted = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function Writable(options) {
|
||||||
|
var Duplex = require('./_stream_duplex');
|
||||||
|
|
||||||
|
// Writable ctor is applied to Duplexes, though they're not
|
||||||
|
// instanceof Writable, they're instanceof Readable.
|
||||||
|
if (!(this instanceof Writable) && !(this instanceof Duplex))
|
||||||
|
return new Writable(options);
|
||||||
|
|
||||||
|
this._writableState = new WritableState(options, this);
|
||||||
|
|
||||||
|
// legacy.
|
||||||
|
this.writable = true;
|
||||||
|
|
||||||
|
Stream.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise people can pipe Writable streams, which is just wrong.
|
||||||
|
Writable.prototype.pipe = function() {
|
||||||
|
this.emit('error', new Error('Cannot pipe. Not readable.'));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function writeAfterEnd(stream, state, cb) {
|
||||||
|
var er = new Error('write after end');
|
||||||
|
// TODO: defer error events consistently everywhere, not just the cb
|
||||||
|
stream.emit('error', er);
|
||||||
|
process.nextTick(function() {
|
||||||
|
cb(er);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we get something that is not a buffer, string, null, or undefined,
|
||||||
|
// and we're not in objectMode, then that's an error.
|
||||||
|
// Otherwise stream chunks are all considered to be of length=1, and the
|
||||||
|
// watermarks determine how many objects to keep in the buffer, rather than
|
||||||
|
// how many bytes or characters.
|
||||||
|
function validChunk(stream, state, chunk, cb) {
|
||||||
|
var valid = true;
|
||||||
|
if (!util.isBuffer(chunk) &&
|
||||||
|
!util.isString(chunk) &&
|
||||||
|
!util.isNullOrUndefined(chunk) &&
|
||||||
|
!state.objectMode) {
|
||||||
|
var er = new TypeError('Invalid non-string/buffer chunk');
|
||||||
|
stream.emit('error', er);
|
||||||
|
process.nextTick(function() {
|
||||||
|
cb(er);
|
||||||
|
});
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
|
||||||
|
Writable.prototype.write = function(chunk, encoding, cb) {
|
||||||
|
var state = this._writableState;
|
||||||
|
var ret = false;
|
||||||
|
|
||||||
|
if (util.isFunction(encoding)) {
|
||||||
|
cb = encoding;
|
||||||
|
encoding = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (util.isBuffer(chunk))
|
||||||
|
encoding = 'buffer';
|
||||||
|
else if (!encoding)
|
||||||
|
encoding = state.defaultEncoding;
|
||||||
|
|
||||||
|
if (!util.isFunction(cb))
|
||||||
|
cb = function() {};
|
||||||
|
|
||||||
|
if (state.ended)
|
||||||
|
writeAfterEnd(this, state, cb);
|
||||||
|
else if (validChunk(this, state, chunk, cb)) {
|
||||||
|
state.pendingcb++;
|
||||||
|
ret = writeOrBuffer(this, state, chunk, encoding, cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
};
|
||||||
|
|
||||||
|
Writable.prototype.cork = function() {
|
||||||
|
var state = this._writableState;
|
||||||
|
|
||||||
|
state.corked++;
|
||||||
|
};
|
||||||
|
|
||||||
|
Writable.prototype.uncork = function() {
|
||||||
|
var state = this._writableState;
|
||||||
|
|
||||||
|
if (state.corked) {
|
||||||
|
state.corked--;
|
||||||
|
|
||||||
|
if (!state.writing &&
|
||||||
|
!state.corked &&
|
||||||
|
!state.finished &&
|
||||||
|
!state.bufferProcessing &&
|
||||||
|
state.buffer.length)
|
||||||
|
clearBuffer(this, state);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function decodeChunk(state, chunk, encoding) {
|
||||||
|
if (!state.objectMode &&
|
||||||
|
state.decodeStrings !== false &&
|
||||||
|
util.isString(chunk)) {
|
||||||
|
chunk = new Buffer(chunk, encoding);
|
||||||
|
}
|
||||||
|
return chunk;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we're already writing something, then just put this
|
||||||
|
// in the queue, and wait our turn. Otherwise, call _write
|
||||||
|
// If we return false, then we need a drain event, so set that flag.
|
||||||
|
function writeOrBuffer(stream, state, chunk, encoding, cb) {
|
||||||
|
chunk = decodeChunk(state, chunk, encoding);
|
||||||
|
if (util.isBuffer(chunk))
|
||||||
|
encoding = 'buffer';
|
||||||
|
var len = state.objectMode ? 1 : chunk.length;
|
||||||
|
|
||||||
|
state.length += len;
|
||||||
|
|
||||||
|
var ret = state.length < state.highWaterMark;
|
||||||
|
// we must ensure that previous needDrain will not be reset to false.
|
||||||
|
if (!ret)
|
||||||
|
state.needDrain = true;
|
||||||
|
|
||||||
|
if (state.writing || state.corked)
|
||||||
|
state.buffer.push(new WriteReq(chunk, encoding, cb));
|
||||||
|
else
|
||||||
|
doWrite(stream, state, false, len, chunk, encoding, cb);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
function doWrite(stream, state, writev, len, chunk, encoding, cb) {
|
||||||
|
state.writelen = len;
|
||||||
|
state.writecb = cb;
|
||||||
|
state.writing = true;
|
||||||
|
state.sync = true;
|
||||||
|
if (writev)
|
||||||
|
stream._writev(chunk, state.onwrite);
|
||||||
|
else
|
||||||
|
stream._write(chunk, encoding, state.onwrite);
|
||||||
|
state.sync = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onwriteError(stream, state, sync, er, cb) {
|
||||||
|
if (sync)
|
||||||
|
process.nextTick(function() {
|
||||||
|
state.pendingcb--;
|
||||||
|
cb(er);
|
||||||
|
});
|
||||||
|
else {
|
||||||
|
state.pendingcb--;
|
||||||
|
cb(er);
|
||||||
|
}
|
||||||
|
|
||||||
|
stream._writableState.errorEmitted = true;
|
||||||
|
stream.emit('error', er);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onwriteStateUpdate(state) {
|
||||||
|
state.writing = false;
|
||||||
|
state.writecb = null;
|
||||||
|
state.length -= state.writelen;
|
||||||
|
state.writelen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onwrite(stream, er) {
|
||||||
|
var state = stream._writableState;
|
||||||
|
var sync = state.sync;
|
||||||
|
var cb = state.writecb;
|
||||||
|
|
||||||
|
onwriteStateUpdate(state);
|
||||||
|
|
||||||
|
if (er)
|
||||||
|
onwriteError(stream, state, sync, er, cb);
|
||||||
|
else {
|
||||||
|
// Check if we're actually ready to finish, but don't emit yet
|
||||||
|
var finished = needFinish(stream, state);
|
||||||
|
|
||||||
|
if (!finished &&
|
||||||
|
!state.corked &&
|
||||||
|
!state.bufferProcessing &&
|
||||||
|
state.buffer.length) {
|
||||||
|
clearBuffer(stream, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sync) {
|
||||||
|
process.nextTick(function() {
|
||||||
|
afterWrite(stream, state, finished, cb);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
afterWrite(stream, state, finished, cb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function afterWrite(stream, state, finished, cb) {
|
||||||
|
if (!finished)
|
||||||
|
onwriteDrain(stream, state);
|
||||||
|
state.pendingcb--;
|
||||||
|
cb();
|
||||||
|
finishMaybe(stream, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Must force callback to be called on nextTick, so that we don't
|
||||||
|
// emit 'drain' before the write() consumer gets the 'false' return
|
||||||
|
// value, and has a chance to attach a 'drain' listener.
|
||||||
|
function onwriteDrain(stream, state) {
|
||||||
|
if (state.length === 0 && state.needDrain) {
|
||||||
|
state.needDrain = false;
|
||||||
|
stream.emit('drain');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// if there's something in the buffer waiting, then process it
|
||||||
|
function clearBuffer(stream, state) {
|
||||||
|
state.bufferProcessing = true;
|
||||||
|
|
||||||
|
if (stream._writev && state.buffer.length > 1) {
|
||||||
|
// Fast case, write everything using _writev()
|
||||||
|
var cbs = [];
|
||||||
|
for (var c = 0; c < state.buffer.length; c++)
|
||||||
|
cbs.push(state.buffer[c].callback);
|
||||||
|
|
||||||
|
// count the one we are adding, as well.
|
||||||
|
// TODO(isaacs) clean this up
|
||||||
|
state.pendingcb++;
|
||||||
|
doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
|
||||||
|
for (var i = 0; i < cbs.length; i++) {
|
||||||
|
state.pendingcb--;
|
||||||
|
cbs[i](err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Clear buffer
|
||||||
|
state.buffer = [];
|
||||||
|
} else {
|
||||||
|
// Slow case, write chunks one-by-one
|
||||||
|
for (var c = 0; c < state.buffer.length; c++) {
|
||||||
|
var entry = state.buffer[c];
|
||||||
|
var chunk = entry.chunk;
|
||||||
|
var encoding = entry.encoding;
|
||||||
|
var cb = entry.callback;
|
||||||
|
var len = state.objectMode ? 1 : chunk.length;
|
||||||
|
|
||||||
|
doWrite(stream, state, false, len, chunk, encoding, cb);
|
||||||
|
|
||||||
|
// if we didn't call the onwrite immediately, then
|
||||||
|
// it means that we need to wait until it does.
|
||||||
|
// also, that means that the chunk and cb are currently
|
||||||
|
// being processed, so move the buffer counter past them.
|
||||||
|
if (state.writing) {
|
||||||
|
c++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c < state.buffer.length)
|
||||||
|
state.buffer = state.buffer.slice(c);
|
||||||
|
else
|
||||||
|
state.buffer.length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
state.bufferProcessing = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Writable.prototype._write = function(chunk, encoding, cb) {
|
||||||
|
cb(new Error('not implemented'));
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
Writable.prototype._writev = null;
|
||||||
|
|
||||||
|
Writable.prototype.end = function(chunk, encoding, cb) {
|
||||||
|
var state = this._writableState;
|
||||||
|
|
||||||
|
if (util.isFunction(chunk)) {
|
||||||
|
cb = chunk;
|
||||||
|
chunk = null;
|
||||||
|
encoding = null;
|
||||||
|
} else if (util.isFunction(encoding)) {
|
||||||
|
cb = encoding;
|
||||||
|
encoding = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!util.isNullOrUndefined(chunk))
|
||||||
|
this.write(chunk, encoding);
|
||||||
|
|
||||||
|
// .end() fully uncorks
|
||||||
|
if (state.corked) {
|
||||||
|
state.corked = 1;
|
||||||
|
this.uncork();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ignore unnecessary end() calls.
|
||||||
|
if (!state.ending && !state.finished)
|
||||||
|
endWritable(this, state, cb);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function needFinish(stream, state) {
|
||||||
|
return (state.ending &&
|
||||||
|
state.length === 0 &&
|
||||||
|
!state.finished &&
|
||||||
|
!state.writing);
|
||||||
|
}
|
||||||
|
|
||||||
|
function prefinish(stream, state) {
|
||||||
|
if (!state.prefinished) {
|
||||||
|
state.prefinished = true;
|
||||||
|
stream.emit('prefinish');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function finishMaybe(stream, state) {
|
||||||
|
var need = needFinish(stream, state);
|
||||||
|
if (need) {
|
||||||
|
if (state.pendingcb === 0) {
|
||||||
|
prefinish(stream, state);
|
||||||
|
state.finished = true;
|
||||||
|
stream.emit('finish');
|
||||||
|
} else
|
||||||
|
prefinish(stream, state);
|
||||||
|
}
|
||||||
|
return need;
|
||||||
|
}
|
||||||
|
|
||||||
|
function endWritable(stream, state, cb) {
|
||||||
|
state.ending = true;
|
||||||
|
finishMaybe(stream, state);
|
||||||
|
if (cb) {
|
||||||
|
if (state.finished)
|
||||||
|
process.nextTick(cb);
|
||||||
|
else
|
||||||
|
stream.once('finish', cb);
|
||||||
|
}
|
||||||
|
state.ended = true;
|
||||||
|
}
|
95
src/node_modules/insert-module-globals/node_modules/readable-stream/package.json
generated
vendored
Normal file
95
src/node_modules/insert-module-globals/node_modules/readable-stream/package.json
generated
vendored
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"readable-stream@~1.1.9",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/insert-module-globals/node_modules/concat-stream"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "readable-stream@>=1.1.9 <1.2.0",
|
||||||
|
"_id": "readable-stream@1.1.13",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/insert-module-globals/readable-stream",
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "rod@vagg.org",
|
||||||
|
"name": "rvagg"
|
||||||
|
},
|
||||||
|
"_npmVersion": "1.4.23",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "readable-stream",
|
||||||
|
"raw": "readable-stream@~1.1.9",
|
||||||
|
"rawSpec": "~1.1.9",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=1.1.9 <1.2.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/insert-module-globals/concat-stream"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
|
||||||
|
"_shasum": "f6eef764f514c89e2b9e23146a75ba106756d23e",
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "readable-stream@~1.1.9",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/insert-module-globals/node_modules/concat-stream",
|
||||||
|
"author": {
|
||||||
|
"email": "i@izs.me",
|
||||||
|
"name": "Isaac Z. Schlueter",
|
||||||
|
"url": "http://blog.izs.me/"
|
||||||
|
},
|
||||||
|
"browser": {
|
||||||
|
"util": false
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/isaacs/readable-stream/issues"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"core-util-is": "~1.0.0",
|
||||||
|
"inherits": "~2.0.1",
|
||||||
|
"isarray": "0.0.1",
|
||||||
|
"string_decoder": "~0.10.x"
|
||||||
|
},
|
||||||
|
"description": "Streams3, a user-land copy of the stream library from Node.js v0.11.x",
|
||||||
|
"devDependencies": {
|
||||||
|
"tap": "~0.2.6"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "f6eef764f514c89e2b9e23146a75ba106756d23e",
|
||||||
|
"tarball": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz"
|
||||||
|
},
|
||||||
|
"gitHead": "3b672fd7ae92acf5b4ffdbabf74b372a0a56b051",
|
||||||
|
"homepage": "https://github.com/isaacs/readable-stream",
|
||||||
|
"keywords": [
|
||||||
|
"readable",
|
||||||
|
"stream",
|
||||||
|
"pipe"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "readable.js",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "i@izs.me",
|
||||||
|
"name": "isaacs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"email": "nathan@tootallnate.net",
|
||||||
|
"name": "tootallnate"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"email": "rod@vagg.org",
|
||||||
|
"name": "rvagg"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "readable-stream",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/isaacs/readable-stream.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "tap test/simple/*.js"
|
||||||
|
},
|
||||||
|
"version": "1.1.13"
|
||||||
|
}
|
1
src/node_modules/insert-module-globals/node_modules/readable-stream/passthrough.js
generated
vendored
Normal file
1
src/node_modules/insert-module-globals/node_modules/readable-stream/passthrough.js
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
module.exports = require("./lib/_stream_passthrough.js")
|
7
src/node_modules/insert-module-globals/node_modules/readable-stream/readable.js
generated
vendored
Normal file
7
src/node_modules/insert-module-globals/node_modules/readable-stream/readable.js
generated
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
exports = module.exports = require('./lib/_stream_readable.js');
|
||||||
|
exports.Stream = require('stream');
|
||||||
|
exports.Readable = exports;
|
||||||
|
exports.Writable = require('./lib/_stream_writable.js');
|
||||||
|
exports.Duplex = require('./lib/_stream_duplex.js');
|
||||||
|
exports.Transform = require('./lib/_stream_transform.js');
|
||||||
|
exports.PassThrough = require('./lib/_stream_passthrough.js');
|
1
src/node_modules/insert-module-globals/node_modules/readable-stream/transform.js
generated
vendored
Normal file
1
src/node_modules/insert-module-globals/node_modules/readable-stream/transform.js
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
module.exports = require("./lib/_stream_transform.js")
|
1
src/node_modules/insert-module-globals/node_modules/readable-stream/writable.js
generated
vendored
Normal file
1
src/node_modules/insert-module-globals/node_modules/readable-stream/writable.js
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
module.exports = require("./lib/_stream_writable.js")
|
1
src/node_modules/localtunnel/node_modules/.bin/window-size
generated
vendored
Symbolic link
1
src/node_modules/localtunnel/node_modules/.bin/window-size
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../window-size/cli.js
|
21
src/node_modules/localtunnel/node_modules/window-size/LICENSE
generated
vendored
Normal file
21
src/node_modules/localtunnel/node_modules/window-size/LICENSE
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015, Jon Schlinkert.
|
||||||
|
|
||||||
|
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.
|
45
src/node_modules/localtunnel/node_modules/window-size/README.md
generated
vendored
Normal file
45
src/node_modules/localtunnel/node_modules/window-size/README.md
generated
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# window-size [![NPM version](https://badge.fury.io/js/window-size.svg)](http://badge.fury.io/js/window-size) [![Build Status](https://travis-ci.org/jonschlinkert/window-size.svg)](https://travis-ci.org/jonschlinkert/window-size)
|
||||||
|
|
||||||
|
> Reliable way to to get the height and width of the terminal/console in a node.js environment.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
Install with [npm](https://www.npmjs.com/)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm i window-size --save
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```js
|
||||||
|
var size = require('window-size');
|
||||||
|
size.height; // "25" (rows)
|
||||||
|
size.width; // "80" (columns)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Other projects
|
||||||
|
|
||||||
|
* [base-cli](https://www.npmjs.com/package/base-cli): Plugin for base-methods that maps built-in methods to CLI args (also supports methods from a… [more](https://www.npmjs.com/package/base-cli) | [homepage](https://github.com/jonschlinkert/base-cli)
|
||||||
|
* [lint-deps](https://www.npmjs.com/package/lint-deps): CLI tool that tells you when dependencies are missing from package.json and offers you a… [more](https://www.npmjs.com/package/lint-deps) | [homepage](https://github.com/jonschlinkert/lint-deps)
|
||||||
|
* [yargs](https://www.npmjs.com/package/yargs): Light-weight option parsing with an argv hash. No optstrings attached. | [homepage](https://github.com/bcoe/yargs#readme)
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/window-size/issues/new).
|
||||||
|
|
||||||
|
## Author
|
||||||
|
|
||||||
|
**Jon Schlinkert**
|
||||||
|
|
||||||
|
+ [github/jonschlinkert](https://github.com/jonschlinkert)
|
||||||
|
+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Copyright © 2014-2015 [Jon Schlinkert](https://github.com/jonschlinkert)
|
||||||
|
Released under the MIT license.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on November 15, 2015._
|
30
src/node_modules/localtunnel/node_modules/window-size/cli.js
generated
vendored
Executable file
30
src/node_modules/localtunnel/node_modules/window-size/cli.js
generated
vendored
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
'use strict';
|
||||||
|
var helpText = ['Usage',
|
||||||
|
' $ window-size',
|
||||||
|
'',
|
||||||
|
'Example',
|
||||||
|
' $ window-size',
|
||||||
|
' height: 40 ',
|
||||||
|
' width : 145',
|
||||||
|
''].join('\n');
|
||||||
|
|
||||||
|
function showSize () {
|
||||||
|
var size = require('./');
|
||||||
|
console.log('height: ' + size.height);
|
||||||
|
console.log('width : ' + size.width);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv.length > 2) {
|
||||||
|
switch (process.argv[2]) {
|
||||||
|
case 'help':
|
||||||
|
case '--help':
|
||||||
|
case '-h':
|
||||||
|
console.log(helpText);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
showSize();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
showSize();
|
||||||
|
}
|
32
src/node_modules/localtunnel/node_modules/window-size/index.js
generated
vendored
Normal file
32
src/node_modules/localtunnel/node_modules/window-size/index.js
generated
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* window-size <https://github.com/jonschlinkert/window-size>
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014-2015 Jon Schlinkert
|
||||||
|
* Licensed under the MIT license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var tty = require('tty');
|
||||||
|
|
||||||
|
module.exports = (function () {
|
||||||
|
var width;
|
||||||
|
var height;
|
||||||
|
|
||||||
|
if (tty.isatty(1) && tty.isatty(2)) {
|
||||||
|
if (process.stdout.getWindowSize) {
|
||||||
|
width = process.stdout.getWindowSize(1)[0];
|
||||||
|
height = process.stdout.getWindowSize(1)[1];
|
||||||
|
} else if (tty.getWindowSize) {
|
||||||
|
width = tty.getWindowSize()[1];
|
||||||
|
height = tty.getWindowSize()[0];
|
||||||
|
} else if (process.stdout.columns && process.stdout.rows) {
|
||||||
|
height = process.stdout.columns;
|
||||||
|
width = process.stdout.rows;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Error('window-size could not get size with tty or process.stdout.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return {height: height, width: width};
|
||||||
|
})();
|
111
src/node_modules/localtunnel/node_modules/window-size/package.json
generated
vendored
Normal file
111
src/node_modules/localtunnel/node_modules/window-size/package.json
generated
vendored
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"window-size@^0.1.2",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/yargs"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"window-size@^0.1.2",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/localtunnel/node_modules/yargs"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "window-size@>=0.1.2 <0.2.0",
|
||||||
|
"_id": "window-size@0.1.4",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/localtunnel/window-size",
|
||||||
|
"_nodeVersion": "5.0.0",
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "github@sellside.com",
|
||||||
|
"name": "jonschlinkert"
|
||||||
|
},
|
||||||
|
"_npmVersion": "3.3.6",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "window-size",
|
||||||
|
"raw": "window-size@^0.1.2",
|
||||||
|
"rawSpec": "^0.1.2",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=0.1.2 <0.2.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/localtunnel/yargs"
|
||||||
|
],
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "window-size@^0.1.2",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/localtunnel/node_modules/yargs",
|
||||||
|
"author": {
|
||||||
|
"name": "Jon Schlinkert",
|
||||||
|
"url": "https://github.com/jonschlinkert"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"window-size": "cli.js"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/jonschlinkert/window-size/issues"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"description": "Reliable way to to get the height and width of the terminal/console in a node.js environment.",
|
||||||
|
"devDependencies": {
|
||||||
|
"semistandard": "^7.0.2",
|
||||||
|
"tap": "^2.2.1"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876",
|
||||||
|
"tarball": "http://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.10.0"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"index.js",
|
||||||
|
"cli.js"
|
||||||
|
],
|
||||||
|
"gitHead": "619d0da99254adc5c6059c84e3ec2b24564add46",
|
||||||
|
"homepage": "https://github.com/jonschlinkert/window-size",
|
||||||
|
"keywords": [
|
||||||
|
"console",
|
||||||
|
"height",
|
||||||
|
"resize",
|
||||||
|
"size",
|
||||||
|
"terminal",
|
||||||
|
"tty",
|
||||||
|
"width",
|
||||||
|
"window"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "index.js",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "github@sellside.com",
|
||||||
|
"name": "jonschlinkert"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"email": "brian.woodward@gmail.com",
|
||||||
|
"name": "doowb"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "window-size",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/jonschlinkert/window-size.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"pretest": "semistandard",
|
||||||
|
"test": "tap --coverage test.js"
|
||||||
|
},
|
||||||
|
"verb": {
|
||||||
|
"related": {
|
||||||
|
"list": [
|
||||||
|
"yargs",
|
||||||
|
"lint-deps",
|
||||||
|
"base-cli"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"version": "0.1.4"
|
||||||
|
}
|
24
src/node_modules/module-deps/node_modules/concat-stream/LICENSE
generated
vendored
Normal file
24
src/node_modules/module-deps/node_modules/concat-stream/LICENSE
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2013 Max Ogden
|
||||||
|
|
||||||
|
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.
|
136
src/node_modules/module-deps/node_modules/concat-stream/index.js
generated
vendored
Normal file
136
src/node_modules/module-deps/node_modules/concat-stream/index.js
generated
vendored
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
var Writable = require('readable-stream').Writable
|
||||||
|
var inherits = require('inherits')
|
||||||
|
|
||||||
|
if (typeof Uint8Array === 'undefined') {
|
||||||
|
var U8 = require('typedarray').Uint8Array
|
||||||
|
} else {
|
||||||
|
var U8 = Uint8Array
|
||||||
|
}
|
||||||
|
|
||||||
|
function ConcatStream(opts, cb) {
|
||||||
|
if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb)
|
||||||
|
|
||||||
|
if (typeof opts === 'function') {
|
||||||
|
cb = opts
|
||||||
|
opts = {}
|
||||||
|
}
|
||||||
|
if (!opts) opts = {}
|
||||||
|
|
||||||
|
var encoding = opts.encoding
|
||||||
|
var shouldInferEncoding = false
|
||||||
|
|
||||||
|
if (!encoding) {
|
||||||
|
shouldInferEncoding = true
|
||||||
|
} else {
|
||||||
|
encoding = String(encoding).toLowerCase()
|
||||||
|
if (encoding === 'u8' || encoding === 'uint8') {
|
||||||
|
encoding = 'uint8array'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Writable.call(this, { objectMode: true })
|
||||||
|
|
||||||
|
this.encoding = encoding
|
||||||
|
this.shouldInferEncoding = shouldInferEncoding
|
||||||
|
|
||||||
|
if (cb) this.on('finish', function () { cb(this.getBody()) })
|
||||||
|
this.body = []
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = ConcatStream
|
||||||
|
inherits(ConcatStream, Writable)
|
||||||
|
|
||||||
|
ConcatStream.prototype._write = function(chunk, enc, next) {
|
||||||
|
this.body.push(chunk)
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
ConcatStream.prototype.inferEncoding = function (buff) {
|
||||||
|
var firstBuffer = buff === undefined ? this.body[0] : buff;
|
||||||
|
if (Buffer.isBuffer(firstBuffer)) return 'buffer'
|
||||||
|
if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array'
|
||||||
|
if (Array.isArray(firstBuffer)) return 'array'
|
||||||
|
if (typeof firstBuffer === 'string') return 'string'
|
||||||
|
if (Object.prototype.toString.call(firstBuffer) === "[object Object]") return 'object'
|
||||||
|
return 'buffer'
|
||||||
|
}
|
||||||
|
|
||||||
|
ConcatStream.prototype.getBody = function () {
|
||||||
|
if (!this.encoding && this.body.length === 0) return []
|
||||||
|
if (this.shouldInferEncoding) this.encoding = this.inferEncoding()
|
||||||
|
if (this.encoding === 'array') return arrayConcat(this.body)
|
||||||
|
if (this.encoding === 'string') return stringConcat(this.body)
|
||||||
|
if (this.encoding === 'buffer') return bufferConcat(this.body)
|
||||||
|
if (this.encoding === 'uint8array') return u8Concat(this.body)
|
||||||
|
return this.body
|
||||||
|
}
|
||||||
|
|
||||||
|
var isArray = Array.isArray || function (arr) {
|
||||||
|
return Object.prototype.toString.call(arr) == '[object Array]'
|
||||||
|
}
|
||||||
|
|
||||||
|
function isArrayish (arr) {
|
||||||
|
return /Array\]$/.test(Object.prototype.toString.call(arr))
|
||||||
|
}
|
||||||
|
|
||||||
|
function stringConcat (parts) {
|
||||||
|
var strings = []
|
||||||
|
var needsToString = false
|
||||||
|
for (var i = 0; i < parts.length; i++) {
|
||||||
|
var p = parts[i]
|
||||||
|
if (typeof p === 'string') {
|
||||||
|
strings.push(p)
|
||||||
|
} else if (Buffer.isBuffer(p)) {
|
||||||
|
strings.push(p)
|
||||||
|
} else {
|
||||||
|
strings.push(Buffer(p))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Buffer.isBuffer(parts[0])) {
|
||||||
|
strings = Buffer.concat(strings)
|
||||||
|
strings = strings.toString('utf8')
|
||||||
|
} else {
|
||||||
|
strings = strings.join('')
|
||||||
|
}
|
||||||
|
return strings
|
||||||
|
}
|
||||||
|
|
||||||
|
function bufferConcat (parts) {
|
||||||
|
var bufs = []
|
||||||
|
for (var i = 0; i < parts.length; i++) {
|
||||||
|
var p = parts[i]
|
||||||
|
if (Buffer.isBuffer(p)) {
|
||||||
|
bufs.push(p)
|
||||||
|
} else if (typeof p === 'string' || isArrayish(p)
|
||||||
|
|| (p && typeof p.subarray === 'function')) {
|
||||||
|
bufs.push(Buffer(p))
|
||||||
|
} else bufs.push(Buffer(String(p)))
|
||||||
|
}
|
||||||
|
return Buffer.concat(bufs)
|
||||||
|
}
|
||||||
|
|
||||||
|
function arrayConcat (parts) {
|
||||||
|
var res = []
|
||||||
|
for (var i = 0; i < parts.length; i++) {
|
||||||
|
res.push.apply(res, parts[i])
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
function u8Concat (parts) {
|
||||||
|
var len = 0
|
||||||
|
for (var i = 0; i < parts.length; i++) {
|
||||||
|
if (typeof parts[i] === 'string') {
|
||||||
|
parts[i] = Buffer(parts[i])
|
||||||
|
}
|
||||||
|
len += parts[i].length
|
||||||
|
}
|
||||||
|
var u8 = new U8(len)
|
||||||
|
for (var i = 0, offset = 0; i < parts.length; i++) {
|
||||||
|
var part = parts[i]
|
||||||
|
for (var j = 0; j < part.length; j++) {
|
||||||
|
u8[offset++] = part[j]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return u8
|
||||||
|
}
|
108
src/node_modules/module-deps/node_modules/concat-stream/package.json
generated
vendored
Normal file
108
src/node_modules/module-deps/node_modules/concat-stream/package.json
generated
vendored
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"concat-stream@~1.4.1",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/browserify"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"concat-stream@~1.4.5",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/module-deps"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "concat-stream@>=1.4.5 <1.5.0",
|
||||||
|
"_id": "concat-stream@1.4.10",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/module-deps/concat-stream",
|
||||||
|
"_nodeVersion": "1.8.2",
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "max@maxogden.com",
|
||||||
|
"name": "maxogden"
|
||||||
|
},
|
||||||
|
"_npmVersion": "2.9.0",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "concat-stream",
|
||||||
|
"raw": "concat-stream@~1.4.5",
|
||||||
|
"rawSpec": "~1.4.5",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=1.4.5 <1.5.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/module-deps"
|
||||||
|
],
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "concat-stream@~1.4.5",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/module-deps",
|
||||||
|
"author": {
|
||||||
|
"email": "max@maxogden.com",
|
||||||
|
"name": "Max Ogden"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "http://github.com/maxogden/concat-stream/issues"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"inherits": "~2.0.1",
|
||||||
|
"readable-stream": "~1.1.9",
|
||||||
|
"typedarray": "~0.0.5"
|
||||||
|
},
|
||||||
|
"description": "writable stream that concatenates strings or binary data and calls a callback with the result",
|
||||||
|
"devDependencies": {
|
||||||
|
"tape": "~2.3.2"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "acc3bbf5602cb8cc980c6ac840fa7d8603e3ef36",
|
||||||
|
"tarball": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz"
|
||||||
|
},
|
||||||
|
"engines": [
|
||||||
|
"node >= 0.8"
|
||||||
|
],
|
||||||
|
"files": [
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"gitHead": "71d37be263a0457b8afcbb27237e71ddca634373",
|
||||||
|
"homepage": "https://github.com/maxogden/concat-stream#readme",
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "index.js",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "max@maxogden.com",
|
||||||
|
"name": "maxogden"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "concat-stream",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+ssh://git@github.com/maxogden/concat-stream.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "tape test/*.js test/server/*.js"
|
||||||
|
},
|
||||||
|
"tags": [
|
||||||
|
"stream",
|
||||||
|
"simple",
|
||||||
|
"util",
|
||||||
|
"utility"
|
||||||
|
],
|
||||||
|
"testling": {
|
||||||
|
"browsers": [
|
||||||
|
"ie/8..latest",
|
||||||
|
"firefox/17..latest",
|
||||||
|
"firefox/nightly",
|
||||||
|
"chrome/22..latest",
|
||||||
|
"chrome/canary",
|
||||||
|
"opera/12..latest",
|
||||||
|
"opera/next",
|
||||||
|
"safari/5.1..latest",
|
||||||
|
"ipad/6.0..latest",
|
||||||
|
"iphone/6.0..latest",
|
||||||
|
"android-browser/4.2..latest"
|
||||||
|
],
|
||||||
|
"files": "test/*.js"
|
||||||
|
},
|
||||||
|
"version": "1.4.10"
|
||||||
|
}
|
94
src/node_modules/module-deps/node_modules/concat-stream/readme.md
generated
vendored
Normal file
94
src/node_modules/module-deps/node_modules/concat-stream/readme.md
generated
vendored
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# concat-stream
|
||||||
|
|
||||||
|
Writable stream that concatenates strings or binary data and calls a callback with the result. Not a transform stream -- more of a stream sink.
|
||||||
|
|
||||||
|
[![Build Status](https://travis-ci.org/maxogden/concat-stream.svg?branch=master)](https://travis-ci.org/maxogden/concat-stream)
|
||||||
|
|
||||||
|
[![NPM](https://nodei.co/npm/concat-stream.png)](https://nodei.co/npm/concat-stream/)
|
||||||
|
|
||||||
|
### description
|
||||||
|
|
||||||
|
Streams emit many buffers. If you want to collect all of the buffers, and when the stream ends concatenate all of the buffers together and receive a single buffer then this is the module for you.
|
||||||
|
|
||||||
|
Only use this if you know you can fit all of the output of your stream into a single Buffer (e.g. in RAM).
|
||||||
|
|
||||||
|
There are also `objectMode` streams that emit things other than Buffers, and you can concatenate these too. See below for details.
|
||||||
|
|
||||||
|
### examples
|
||||||
|
|
||||||
|
#### Buffers
|
||||||
|
|
||||||
|
```js
|
||||||
|
var fs = require('fs')
|
||||||
|
var concat = require('concat-stream')
|
||||||
|
|
||||||
|
var readStream = fs.createReadStream('cat.png')
|
||||||
|
var concatStream = concat(gotPicture)
|
||||||
|
|
||||||
|
readStream.on('error', handleError)
|
||||||
|
readStream.pipe(concatStream)
|
||||||
|
|
||||||
|
function gotPicture(imageBuffer) {
|
||||||
|
// imageBuffer is all of `cat.png` as a node.js Buffer
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleError(err) {
|
||||||
|
// handle your error appropriately here, e.g.:
|
||||||
|
console.error(err) // print the error to STDERR
|
||||||
|
process.exit(1) // exit program with non-zero exit code
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Arrays
|
||||||
|
|
||||||
|
```js
|
||||||
|
var write = concat(function(data) {})
|
||||||
|
write.write([1,2,3])
|
||||||
|
write.write([4,5,6])
|
||||||
|
write.end()
|
||||||
|
// data will be [1,2,3,4,5,6] in the above callback
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Uint8Arrays
|
||||||
|
|
||||||
|
```js
|
||||||
|
var write = concat(function(data) {})
|
||||||
|
var a = new Uint8Array(3)
|
||||||
|
a[0] = 97; a[1] = 98; a[2] = 99
|
||||||
|
write.write(a)
|
||||||
|
write.write('!')
|
||||||
|
write.end(Buffer('!!1'))
|
||||||
|
```
|
||||||
|
|
||||||
|
See `test/` for more examples
|
||||||
|
|
||||||
|
# methods
|
||||||
|
|
||||||
|
```js
|
||||||
|
var concat = require('concat-stream')
|
||||||
|
```
|
||||||
|
|
||||||
|
## var writable = concat(opts={}, cb)
|
||||||
|
|
||||||
|
Return a `writable` stream that will fire `cb(data)` with all of the data that
|
||||||
|
was written to the stream. Data can be written to `writable` as strings,
|
||||||
|
Buffers, arrays of byte integers, and Uint8Arrays.
|
||||||
|
|
||||||
|
By default `concat-stream` will give you back the same data type as the type of the first buffer written to the stream. Use `opts.encoding` to set what format `data` should be returned as, e.g. if you if you don't want to rely on the built-in type checking or for some other reason.
|
||||||
|
|
||||||
|
* `string` - get a string
|
||||||
|
* `buffer` - get back a Buffer
|
||||||
|
* `array` - get an array of byte integers
|
||||||
|
* `uint8array`, `u8`, `uint8` - get back a Uint8Array
|
||||||
|
* `object`, get back an array of Objects
|
||||||
|
|
||||||
|
If you don't specify an encoding, and the types can't be inferred (e.g. you write things that aren't in the list above), it will try to convert concat them into a `Buffer`.
|
||||||
|
|
||||||
|
# error handling
|
||||||
|
|
||||||
|
`concat-stream` does not handle errors for you, so you must handle errors on whatever streams you pipe into `concat-stream`. This is a general rule when programming with node.js streams: always handle errors on each and every stream. Since `concat-stream` is not itself a stream it does not emit errors.
|
||||||
|
|
||||||
|
# license
|
||||||
|
|
||||||
|
MIT LICENSE
|
1
src/node_modules/request/node_modules/.bin/uuid
generated
vendored
Symbolic link
1
src/node_modules/request/node_modules/.bin/uuid
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../node-uuid/bin/uuid
|
4
src/node_modules/request/node_modules/node-uuid/.npmignore
generated
vendored
Normal file
4
src/node_modules/request/node_modules/node-uuid/.npmignore
generated
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
node_modules
|
||||||
|
.DS_Store
|
||||||
|
.nyc_output
|
||||||
|
coverage
|
21
src/node_modules/request/node_modules/node-uuid/LICENSE.md
generated
vendored
Normal file
21
src/node_modules/request/node_modules/node-uuid/LICENSE.md
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2010-2012 Robert Kieffer
|
||||||
|
|
||||||
|
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.
|
254
src/node_modules/request/node_modules/node-uuid/README.md
generated
vendored
Normal file
254
src/node_modules/request/node_modules/node-uuid/README.md
generated
vendored
Normal file
@ -0,0 +1,254 @@
|
|||||||
|
# node-uuid
|
||||||
|
|
||||||
|
Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.
|
||||||
|
|
||||||
|
Features:
|
||||||
|
|
||||||
|
* Generate RFC4122 version 1 or version 4 UUIDs
|
||||||
|
* Runs in node.js and all browsers.
|
||||||
|
* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid').
|
||||||
|
* Cryptographically strong random # generation
|
||||||
|
* `crypto.randomBytes(n)` in node.js
|
||||||
|
* `window.crypto.getRandomValues(ta)` in [supported browsers](https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues#Browser_Compatibility)
|
||||||
|
* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )
|
||||||
|
* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)
|
||||||
|
* Comes with a Command Line Interface for generating uuids on the command line
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
Install it in your browser:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script src="uuid.js"></script>
|
||||||
|
```
|
||||||
|
|
||||||
|
Or in node.js:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install node-uuid
|
||||||
|
```
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var uuid = require('node-uuid');
|
||||||
|
```
|
||||||
|
|
||||||
|
Then create some ids ...
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Generate a v1 (time-based) id
|
||||||
|
uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
|
||||||
|
|
||||||
|
// Generate a v4 (random) id
|
||||||
|
uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
### uuid.v1([`options` [, `buffer` [, `offset`]]])
|
||||||
|
|
||||||
|
Generate and return a RFC4122 v1 (timestamp-based) UUID.
|
||||||
|
|
||||||
|
* `options` - (Object) Optional uuid state to apply. Properties may include:
|
||||||
|
|
||||||
|
* `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.
|
||||||
|
* `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.
|
||||||
|
* `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.
|
||||||
|
* `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.
|
||||||
|
|
||||||
|
* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
|
||||||
|
* `offset` - (Number) Starting index in `buffer` at which to begin writing.
|
||||||
|
|
||||||
|
Returns `buffer`, if specified, otherwise the string form of the UUID
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)
|
||||||
|
|
||||||
|
Example: Generate string UUID with fully-specified options
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
uuid.v1({
|
||||||
|
node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
|
||||||
|
clockseq: 0x1234,
|
||||||
|
msecs: new Date('2011-11-01').getTime(),
|
||||||
|
nsecs: 5678
|
||||||
|
}); // -> "710b962e-041c-11e1-9234-0123456789ab"
|
||||||
|
```
|
||||||
|
|
||||||
|
Example: In-place generation of two binary IDs
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Generate two ids in an array
|
||||||
|
var arr = new Array(32); // -> []
|
||||||
|
uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]
|
||||||
|
uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]
|
||||||
|
|
||||||
|
// Optionally use uuid.unparse() to get stringify the ids
|
||||||
|
uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'
|
||||||
|
uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'
|
||||||
|
```
|
||||||
|
|
||||||
|
### uuid.v4([`options` [, `buffer` [, `offset`]]])
|
||||||
|
|
||||||
|
Generate and return a RFC4122 v4 UUID.
|
||||||
|
|
||||||
|
* `options` - (Object) Optional uuid state to apply. Properties may include:
|
||||||
|
|
||||||
|
* `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values
|
||||||
|
* `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.
|
||||||
|
|
||||||
|
* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
|
||||||
|
* `offset` - (Number) Starting index in `buffer` at which to begin writing.
|
||||||
|
|
||||||
|
Returns `buffer`, if specified, otherwise the string form of the UUID
|
||||||
|
|
||||||
|
Example: Generate string UUID with fully-specified options
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
uuid.v4({
|
||||||
|
random: [
|
||||||
|
0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,
|
||||||
|
0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36
|
||||||
|
]
|
||||||
|
});
|
||||||
|
// -> "109156be-c4fb-41ea-b1b4-efe1671c5836"
|
||||||
|
```
|
||||||
|
|
||||||
|
Example: Generate two IDs in a single buffer
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var buffer = new Array(32); // (or 'new Buffer' in node.js)
|
||||||
|
uuid.v4(null, buffer, 0);
|
||||||
|
uuid.v4(null, buffer, 16);
|
||||||
|
```
|
||||||
|
|
||||||
|
### uuid.parse(id[, buffer[, offset]])
|
||||||
|
### uuid.unparse(buffer[, offset])
|
||||||
|
|
||||||
|
Parse and unparse UUIDs
|
||||||
|
|
||||||
|
* `id` - (String) UUID(-like) string
|
||||||
|
* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used
|
||||||
|
* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0
|
||||||
|
|
||||||
|
Example parsing and unparsing a UUID string
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>
|
||||||
|
var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'
|
||||||
|
```
|
||||||
|
|
||||||
|
### uuid.noConflict()
|
||||||
|
|
||||||
|
(Browsers only) Set `uuid` property back to it's previous value.
|
||||||
|
|
||||||
|
Returns the node-uuid object.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var myUuid = uuid.noConflict();
|
||||||
|
myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Deprecated APIs
|
||||||
|
|
||||||
|
Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.
|
||||||
|
|
||||||
|
### uuid([format [, buffer [, offset]]])
|
||||||
|
|
||||||
|
uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).
|
||||||
|
|
||||||
|
### uuid.BufferClass
|
||||||
|
|
||||||
|
The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.
|
||||||
|
|
||||||
|
## Command Line Interface
|
||||||
|
|
||||||
|
To use the executable, it's probably best to install this library globally.
|
||||||
|
|
||||||
|
`npm install -g node-uuid`
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
```
|
||||||
|
USAGE: uuid [version] [options]
|
||||||
|
|
||||||
|
|
||||||
|
options:
|
||||||
|
|
||||||
|
--help Display this message and exit
|
||||||
|
```
|
||||||
|
|
||||||
|
`version` must be an RFC4122 version that is supported by this library, which is currently version 1 and version 4 (denoted by "v1" and "v4", respectively). `version` defaults to version 4 when not supplied.
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
```
|
||||||
|
> uuid
|
||||||
|
3a91f950-dec8-4688-ba14-5b7bbfc7a563
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
> uuid v1
|
||||||
|
9d0b43e0-7696-11e3-964b-250efa37a98e
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
> uuid v4
|
||||||
|
6790ac7c-24ac-4f98-8464-42f6d98a53ae
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
In node.js
|
||||||
|
|
||||||
|
```
|
||||||
|
npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
In Browser
|
||||||
|
|
||||||
|
```
|
||||||
|
open test/test.html
|
||||||
|
```
|
||||||
|
|
||||||
|
### Benchmarking
|
||||||
|
|
||||||
|
Requires node.js
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install uuid uuid-js
|
||||||
|
node benchmark/benchmark.js
|
||||||
|
```
|
||||||
|
|
||||||
|
For a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)
|
||||||
|
|
||||||
|
For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).
|
||||||
|
|
||||||
|
## Release notes
|
||||||
|
|
||||||
|
### 1.4.6
|
||||||
|
|
||||||
|
* Properly detect node crypto and whatwg crypto
|
||||||
|
* Workaround phantomjs/browserify bug
|
||||||
|
* Explicit check for `window` rather implicit this-global
|
||||||
|
* Issue warning if Math.random() is being used
|
||||||
|
* "use strict";
|
||||||
|
* A few jshint / stylistic updates (=== and such)
|
||||||
|
|
||||||
|
### 1.4.0
|
||||||
|
|
||||||
|
* Improved module context detection
|
||||||
|
* Removed public RNG functions
|
||||||
|
|
||||||
|
### 1.3.2
|
||||||
|
|
||||||
|
* Improve tests and handling of v1() options (Issue #24)
|
||||||
|
* Expose RNG option to allow for perf testing with different generators
|
||||||
|
|
||||||
|
### 1.3.0
|
||||||
|
|
||||||
|
* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!
|
||||||
|
* Support for node.js crypto API
|
||||||
|
* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code
|
53
src/node_modules/request/node_modules/node-uuid/benchmark/README.md
generated
vendored
Normal file
53
src/node_modules/request/node_modules/node-uuid/benchmark/README.md
generated
vendored
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# node-uuid Benchmarks
|
||||||
|
|
||||||
|
### Results
|
||||||
|
|
||||||
|
To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark
|
||||||
|
|
||||||
|
### Run them yourself
|
||||||
|
|
||||||
|
node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`.
|
||||||
|
|
||||||
|
To prepare and run the benchmark issue;
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install uuid uuid-js
|
||||||
|
node benchmark/benchmark.js
|
||||||
|
```
|
||||||
|
|
||||||
|
You'll see an output like this one:
|
||||||
|
|
||||||
|
```
|
||||||
|
# v4
|
||||||
|
nodeuuid.v4(): 854700 uuids/second
|
||||||
|
nodeuuid.v4('binary'): 788643 uuids/second
|
||||||
|
nodeuuid.v4('binary', buffer): 1336898 uuids/second
|
||||||
|
uuid(): 479386 uuids/second
|
||||||
|
uuid('binary'): 582072 uuids/second
|
||||||
|
uuidjs.create(4): 312304 uuids/second
|
||||||
|
|
||||||
|
# v1
|
||||||
|
nodeuuid.v1(): 938086 uuids/second
|
||||||
|
nodeuuid.v1('binary'): 683060 uuids/second
|
||||||
|
nodeuuid.v1('binary', buffer): 1644736 uuids/second
|
||||||
|
uuidjs.create(1): 190621 uuids/second
|
||||||
|
```
|
||||||
|
|
||||||
|
* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library.
|
||||||
|
* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK.
|
||||||
|
|
||||||
|
If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file:
|
||||||
|
|
||||||
|
```
|
||||||
|
for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done;
|
||||||
|
```
|
||||||
|
|
||||||
|
If you're interested in how performance varies between different node versions, you can issue the above command multiple times.
|
||||||
|
|
||||||
|
You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot:
|
||||||
|
|
||||||
|
```
|
||||||
|
(cd benchmark/ && ./bench.sh)
|
||||||
|
```
|
||||||
|
|
||||||
|
This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then.
|
174
src/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu
generated
vendored
Normal file
174
src/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu
generated
vendored
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
#!/opt/local/bin/gnuplot -persist
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# G N U P L O T
|
||||||
|
# Version 4.4 patchlevel 3
|
||||||
|
# last modified March 2011
|
||||||
|
# System: Darwin 10.8.0
|
||||||
|
#
|
||||||
|
# Copyright (C) 1986-1993, 1998, 2004, 2007-2010
|
||||||
|
# Thomas Williams, Colin Kelley and many others
|
||||||
|
#
|
||||||
|
# gnuplot home: http://www.gnuplot.info
|
||||||
|
# faq, bugs, etc: type "help seeking-assistance"
|
||||||
|
# immediate help: type "help"
|
||||||
|
# plot window: hit 'h'
|
||||||
|
set terminal postscript eps noenhanced defaultplex \
|
||||||
|
leveldefault color colortext \
|
||||||
|
solid linewidth 1.2 butt noclip \
|
||||||
|
palfuncparam 2000,0.003 \
|
||||||
|
"Helvetica" 14
|
||||||
|
set output 'bench.eps'
|
||||||
|
unset clip points
|
||||||
|
set clip one
|
||||||
|
unset clip two
|
||||||
|
set bar 1.000000 front
|
||||||
|
set border 31 front linetype -1 linewidth 1.000
|
||||||
|
set xdata
|
||||||
|
set ydata
|
||||||
|
set zdata
|
||||||
|
set x2data
|
||||||
|
set y2data
|
||||||
|
set timefmt x "%d/%m/%y,%H:%M"
|
||||||
|
set timefmt y "%d/%m/%y,%H:%M"
|
||||||
|
set timefmt z "%d/%m/%y,%H:%M"
|
||||||
|
set timefmt x2 "%d/%m/%y,%H:%M"
|
||||||
|
set timefmt y2 "%d/%m/%y,%H:%M"
|
||||||
|
set timefmt cb "%d/%m/%y,%H:%M"
|
||||||
|
set boxwidth
|
||||||
|
set style fill empty border
|
||||||
|
set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1
|
||||||
|
set style circle radius graph 0.02, first 0, 0
|
||||||
|
set dummy x,y
|
||||||
|
set format x "% g"
|
||||||
|
set format y "% g"
|
||||||
|
set format x2 "% g"
|
||||||
|
set format y2 "% g"
|
||||||
|
set format z "% g"
|
||||||
|
set format cb "% g"
|
||||||
|
set angles radians
|
||||||
|
unset grid
|
||||||
|
set key title ""
|
||||||
|
set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox
|
||||||
|
set key noinvert samplen 4 spacing 1 width 0 height 0
|
||||||
|
set key maxcolumns 2 maxrows 0
|
||||||
|
unset label
|
||||||
|
unset arrow
|
||||||
|
set style increment default
|
||||||
|
unset style line
|
||||||
|
set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0
|
||||||
|
unset style arrow
|
||||||
|
set style histogram clustered gap 2 title offset character 0, 0, 0
|
||||||
|
unset logscale
|
||||||
|
set offsets graph 0.05, 0.15, 0, 0
|
||||||
|
set pointsize 1.5
|
||||||
|
set pointintervalbox 1
|
||||||
|
set encoding default
|
||||||
|
unset polar
|
||||||
|
unset parametric
|
||||||
|
unset decimalsign
|
||||||
|
set view 60, 30, 1, 1
|
||||||
|
set samples 100, 100
|
||||||
|
set isosamples 10, 10
|
||||||
|
set surface
|
||||||
|
unset contour
|
||||||
|
set clabel '%8.3g'
|
||||||
|
set mapping cartesian
|
||||||
|
set datafile separator whitespace
|
||||||
|
unset hidden3d
|
||||||
|
set cntrparam order 4
|
||||||
|
set cntrparam linear
|
||||||
|
set cntrparam levels auto 5
|
||||||
|
set cntrparam points 5
|
||||||
|
set size ratio 0 1,1
|
||||||
|
set origin 0,0
|
||||||
|
set style data points
|
||||||
|
set style function lines
|
||||||
|
set xzeroaxis linetype -2 linewidth 1.000
|
||||||
|
set yzeroaxis linetype -2 linewidth 1.000
|
||||||
|
set zzeroaxis linetype -2 linewidth 1.000
|
||||||
|
set x2zeroaxis linetype -2 linewidth 1.000
|
||||||
|
set y2zeroaxis linetype -2 linewidth 1.000
|
||||||
|
set ticslevel 0.5
|
||||||
|
set mxtics default
|
||||||
|
set mytics default
|
||||||
|
set mztics default
|
||||||
|
set mx2tics default
|
||||||
|
set my2tics default
|
||||||
|
set mcbtics default
|
||||||
|
set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0
|
||||||
|
set xtics norangelimit
|
||||||
|
set xtics ()
|
||||||
|
set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0
|
||||||
|
set ytics autofreq norangelimit
|
||||||
|
set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0
|
||||||
|
set ztics autofreq norangelimit
|
||||||
|
set nox2tics
|
||||||
|
set noy2tics
|
||||||
|
set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0
|
||||||
|
set cbtics autofreq norangelimit
|
||||||
|
set title ""
|
||||||
|
set title offset character 0, 0, 0 font "" norotate
|
||||||
|
set timestamp bottom
|
||||||
|
set timestamp ""
|
||||||
|
set timestamp offset character 0, 0, 0 font "" norotate
|
||||||
|
set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] )
|
||||||
|
set autoscale rfixmin
|
||||||
|
set autoscale rfixmax
|
||||||
|
set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] )
|
||||||
|
set autoscale tfixmin
|
||||||
|
set autoscale tfixmax
|
||||||
|
set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
|
||||||
|
set autoscale ufixmin
|
||||||
|
set autoscale ufixmax
|
||||||
|
set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
|
||||||
|
set autoscale vfixmin
|
||||||
|
set autoscale vfixmax
|
||||||
|
set xlabel ""
|
||||||
|
set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
|
||||||
|
set x2label ""
|
||||||
|
set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate
|
||||||
|
set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] )
|
||||||
|
set autoscale xfixmin
|
||||||
|
set autoscale xfixmax
|
||||||
|
set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] )
|
||||||
|
set autoscale x2fixmin
|
||||||
|
set autoscale x2fixmax
|
||||||
|
set ylabel ""
|
||||||
|
set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
|
||||||
|
set y2label ""
|
||||||
|
set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
|
||||||
|
set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] )
|
||||||
|
set autoscale yfixmin
|
||||||
|
set autoscale yfixmax
|
||||||
|
set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] )
|
||||||
|
set autoscale y2fixmin
|
||||||
|
set autoscale y2fixmax
|
||||||
|
set zlabel ""
|
||||||
|
set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
|
||||||
|
set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
|
||||||
|
set autoscale zfixmin
|
||||||
|
set autoscale zfixmax
|
||||||
|
set cblabel ""
|
||||||
|
set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
|
||||||
|
set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] )
|
||||||
|
set autoscale cbfixmin
|
||||||
|
set autoscale cbfixmax
|
||||||
|
set zero 1e-08
|
||||||
|
set lmargin -1
|
||||||
|
set bmargin -1
|
||||||
|
set rmargin -1
|
||||||
|
set tmargin -1
|
||||||
|
set pm3d explicit at s
|
||||||
|
set pm3d scansautomatic
|
||||||
|
set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean
|
||||||
|
set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB
|
||||||
|
set palette rgbformulae 7, 5, 15
|
||||||
|
set colorbox default
|
||||||
|
set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault
|
||||||
|
set loadpath
|
||||||
|
set fontpath
|
||||||
|
set fit noerrorvariables
|
||||||
|
GNUTERM = "aqua"
|
||||||
|
plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2
|
||||||
|
# EOF
|
34
src/node_modules/request/node_modules/node-uuid/benchmark/bench.sh
generated
vendored
Executable file
34
src/node_modules/request/node_modules/node-uuid/benchmark/bench.sh
generated
vendored
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# for a given node version run:
|
||||||
|
# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done;
|
||||||
|
|
||||||
|
PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte')
|
||||||
|
FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es)
|
||||||
|
INDICES=(2 3 2 3 2 2 2 2 2)
|
||||||
|
VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " )
|
||||||
|
TMPJOIN="tmp_join"
|
||||||
|
OUTPUT="bench_results.txt"
|
||||||
|
|
||||||
|
for I in ${!FILES[*]}; do
|
||||||
|
F=${FILES[$I]}
|
||||||
|
P=${PATTERNS[$I]}
|
||||||
|
INDEX=${INDICES[$I]}
|
||||||
|
echo "version $F" > $F
|
||||||
|
for V in $VERSIONS; do
|
||||||
|
(VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F
|
||||||
|
done
|
||||||
|
if [ $I == 0 ]; then
|
||||||
|
cat $F > $TMPJOIN
|
||||||
|
else
|
||||||
|
join $TMPJOIN $F > $OUTPUT
|
||||||
|
cp $OUTPUT $TMPJOIN
|
||||||
|
fi
|
||||||
|
rm $F
|
||||||
|
done
|
||||||
|
|
||||||
|
rm $TMPJOIN
|
||||||
|
|
||||||
|
gnuplot bench.gnu
|
||||||
|
convert -density 200 -resize 800x560 -flatten bench.eps bench.png
|
||||||
|
rm bench.eps
|
34
src/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c
generated
vendored
Normal file
34
src/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c
generated
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
Test performance of native C UUID generation
|
||||||
|
|
||||||
|
To Compile: cc -luuid benchmark-native.c -o benchmark-native
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <uuid/uuid.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
uuid_t myid;
|
||||||
|
char buf[36+1];
|
||||||
|
int i;
|
||||||
|
struct timeval t;
|
||||||
|
double start, finish;
|
||||||
|
|
||||||
|
gettimeofday(&t, NULL);
|
||||||
|
start = t.tv_sec + t.tv_usec/1e6;
|
||||||
|
|
||||||
|
int n = 2e5;
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
uuid_generate(myid);
|
||||||
|
uuid_unparse(myid, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
gettimeofday(&t, NULL);
|
||||||
|
finish = t.tv_sec + t.tv_usec/1e6;
|
||||||
|
double dur = finish - start;
|
||||||
|
|
||||||
|
printf("%d uuids/sec", (int)(n/dur));
|
||||||
|
return 0;
|
||||||
|
}
|
84
src/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js
generated
vendored
Normal file
84
src/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js
generated
vendored
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
try {
|
||||||
|
var nodeuuid = require('../uuid');
|
||||||
|
} catch (e) {
|
||||||
|
console.error('node-uuid require failed - skipping tests');
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
var uuid = require('uuid');
|
||||||
|
} catch (e) {
|
||||||
|
console.error('uuid require failed - skipping tests');
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
var uuidjs = require('uuid-js');
|
||||||
|
} catch (e) {
|
||||||
|
console.error('uuid-js require failed - skipping tests');
|
||||||
|
}
|
||||||
|
|
||||||
|
var N = 5e5;
|
||||||
|
|
||||||
|
function rate(msg, t) {
|
||||||
|
console.log(msg + ': ' +
|
||||||
|
(N / (Date.now() - t) * 1e3 | 0) +
|
||||||
|
' uuids/second');
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('# v4');
|
||||||
|
|
||||||
|
// node-uuid - string form
|
||||||
|
if (nodeuuid) {
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4();
|
||||||
|
rate('nodeuuid.v4() - using node.js crypto RNG', t);
|
||||||
|
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG});
|
||||||
|
rate('nodeuuid.v4() - using Math.random() RNG', t);
|
||||||
|
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary');
|
||||||
|
rate('nodeuuid.v4(\'binary\')', t);
|
||||||
|
|
||||||
|
var buffer = new nodeuuid.BufferClass(16);
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer);
|
||||||
|
rate('nodeuuid.v4(\'binary\', buffer)', t);
|
||||||
|
}
|
||||||
|
|
||||||
|
// libuuid - string form
|
||||||
|
if (uuid) {
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) uuid();
|
||||||
|
rate('uuid()', t);
|
||||||
|
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) uuid('binary');
|
||||||
|
rate('uuid(\'binary\')', t);
|
||||||
|
}
|
||||||
|
|
||||||
|
// uuid-js - string form
|
||||||
|
if (uuidjs) {
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4);
|
||||||
|
rate('uuidjs.create(4)', t);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 140byte.es
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)});
|
||||||
|
rate('140byte.es_v4', t);
|
||||||
|
|
||||||
|
console.log('');
|
||||||
|
console.log('# v1');
|
||||||
|
|
||||||
|
// node-uuid - v1 string form
|
||||||
|
if (nodeuuid) {
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1();
|
||||||
|
rate('nodeuuid.v1()', t);
|
||||||
|
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary');
|
||||||
|
rate('nodeuuid.v1(\'binary\')', t);
|
||||||
|
|
||||||
|
var buffer = new nodeuuid.BufferClass(16);
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer);
|
||||||
|
rate('nodeuuid.v1(\'binary\', buffer)', t);
|
||||||
|
}
|
||||||
|
|
||||||
|
// uuid-js - v1 string form
|
||||||
|
if (uuidjs) {
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1);
|
||||||
|
rate('uuidjs.create(1)', t);
|
||||||
|
}
|
26
src/node_modules/request/node_modules/node-uuid/bin/uuid
generated
vendored
Executable file
26
src/node_modules/request/node_modules/node-uuid/bin/uuid
generated
vendored
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
var path = require('path');
|
||||||
|
var uuid = require(path.join(__dirname, '..'));
|
||||||
|
|
||||||
|
var arg = process.argv[2];
|
||||||
|
|
||||||
|
if ('--help' === arg) {
|
||||||
|
console.log('\n USAGE: uuid [version] [options]\n\n');
|
||||||
|
console.log(' options:\n');
|
||||||
|
console.log(' --help Display this message and exit\n');
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null == arg) {
|
||||||
|
console.log(uuid());
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('v1' !== arg && 'v4' !== arg) {
|
||||||
|
console.error('Version must be RFC4122 version 1 or version 4, denoted as "v1" or "v4"');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(uuid[arg]());
|
||||||
|
process.exit(0);
|
23
src/node_modules/request/node_modules/node-uuid/bower.json
generated
vendored
Normal file
23
src/node_modules/request/node_modules/node-uuid/bower.json
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"name": "node-uuid",
|
||||||
|
"version": "1.4.7",
|
||||||
|
"homepage": "https://github.com/broofa/node-uuid",
|
||||||
|
"authors": [
|
||||||
|
"Robert Kieffer <robert@broofa.com>"
|
||||||
|
],
|
||||||
|
"description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.",
|
||||||
|
"main": "uuid.js",
|
||||||
|
"keywords": [
|
||||||
|
"uuid",
|
||||||
|
"gid",
|
||||||
|
"rfc4122"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"ignore": [
|
||||||
|
"**/.*",
|
||||||
|
"node_modules",
|
||||||
|
"bower_components",
|
||||||
|
"test",
|
||||||
|
"tests"
|
||||||
|
]
|
||||||
|
}
|
25
src/node_modules/request/node_modules/node-uuid/component.json
generated
vendored
Normal file
25
src/node_modules/request/node_modules/node-uuid/component.json
generated
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"name": "node-uuid",
|
||||||
|
"repo": "broofa/node-uuid",
|
||||||
|
"description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.",
|
||||||
|
"version": "1.4.7",
|
||||||
|
"author": "Robert Kieffer <robert@broofa.com>",
|
||||||
|
"contributors": [
|
||||||
|
{
|
||||||
|
"name": "Christoph Tavan <dev@tavan.de>",
|
||||||
|
"github": "https://github.com/ctavan"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"uuid",
|
||||||
|
"guid",
|
||||||
|
"rfc4122"
|
||||||
|
],
|
||||||
|
"dependencies": {},
|
||||||
|
"development": {},
|
||||||
|
"main": "uuid.js",
|
||||||
|
"scripts": [
|
||||||
|
"uuid.js"
|
||||||
|
],
|
||||||
|
"license": "MIT"
|
||||||
|
}
|
105
src/node_modules/request/node_modules/node-uuid/package.json
generated
vendored
Normal file
105
src/node_modules/request/node_modules/node-uuid/package.json
generated
vendored
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"node-uuid@~1.4.3",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/request"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "node-uuid@>=1.4.3 <1.5.0",
|
||||||
|
"_id": "node-uuid@1.4.7",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/request/node-uuid",
|
||||||
|
"_nodeVersion": "5.0.0",
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "coolaj86@gmail.com",
|
||||||
|
"name": "coolaj86"
|
||||||
|
},
|
||||||
|
"_npmVersion": "3.3.6",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "node-uuid",
|
||||||
|
"raw": "node-uuid@~1.4.3",
|
||||||
|
"rawSpec": "~1.4.3",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=1.4.3 <1.5.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/request"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz",
|
||||||
|
"_shasum": "6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f",
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "node-uuid@~1.4.3",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/request",
|
||||||
|
"author": {
|
||||||
|
"email": "robert@broofa.com",
|
||||||
|
"name": "Robert Kieffer"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"uuid": "./bin/uuid"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/broofa/node-uuid/issues"
|
||||||
|
},
|
||||||
|
"contributors": [
|
||||||
|
{
|
||||||
|
"email": "coolaj86@gmail.com",
|
||||||
|
"name": "AJ ONeal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"email": "dev@tavan.de",
|
||||||
|
"name": "Christoph Tavan"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dependencies": {},
|
||||||
|
"description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.",
|
||||||
|
"devDependencies": {
|
||||||
|
"nyc": "^2.2.0"
|
||||||
|
},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f",
|
||||||
|
"tarball": "http://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz"
|
||||||
|
},
|
||||||
|
"gitHead": "309512573ec1c60143c257157479a20f7f1f51cd",
|
||||||
|
"homepage": "https://github.com/broofa/node-uuid",
|
||||||
|
"installable": true,
|
||||||
|
"keywords": [
|
||||||
|
"guid",
|
||||||
|
"rfc4122",
|
||||||
|
"uuid"
|
||||||
|
],
|
||||||
|
"lib": ".",
|
||||||
|
"licenses": [
|
||||||
|
{
|
||||||
|
"type": "MIT",
|
||||||
|
"url": "https://raw.github.com/broofa/node-uuid/master/LICENSE.md"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"main": "./uuid.js",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "robert@broofa.com",
|
||||||
|
"name": "broofa"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"email": "coolaj86@gmail.com",
|
||||||
|
"name": "coolaj86"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "node-uuid",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/broofa/node-uuid.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"coverage": "nyc npm test && nyc report",
|
||||||
|
"test": "node test/test.js"
|
||||||
|
},
|
||||||
|
"url": "http://github.com/broofa/node-uuid",
|
||||||
|
"version": "1.4.7"
|
||||||
|
}
|
63
src/node_modules/request/node_modules/node-uuid/test/compare_v1.js
generated
vendored
Normal file
63
src/node_modules/request/node_modules/node-uuid/test/compare_v1.js
generated
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
var assert = require('assert'),
|
||||||
|
nodeuuid = require('../uuid'),
|
||||||
|
uuidjs = require('uuid-js'),
|
||||||
|
libuuid = require('uuid').generate,
|
||||||
|
util = require('util'),
|
||||||
|
exec = require('child_process').exec,
|
||||||
|
os = require('os');
|
||||||
|
|
||||||
|
// On Mac Os X / macports there's only the ossp-uuid package that provides uuid
|
||||||
|
// On Linux there's uuid-runtime which provides uuidgen
|
||||||
|
var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t';
|
||||||
|
|
||||||
|
function compare(ids) {
|
||||||
|
console.log(ids);
|
||||||
|
for (var i = 0; i < ids.length; i++) {
|
||||||
|
var id = ids[i].split('-');
|
||||||
|
id = [id[2], id[1], id[0]].join('');
|
||||||
|
ids[i] = id;
|
||||||
|
}
|
||||||
|
var sorted = ([].concat(ids)).sort();
|
||||||
|
|
||||||
|
if (sorted.toString() !== ids.toString()) {
|
||||||
|
console.log('Warning: sorted !== ids');
|
||||||
|
} else {
|
||||||
|
console.log('everything in order!');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test time order of v1 uuids
|
||||||
|
var ids = [];
|
||||||
|
while (ids.length < 10e3) ids.push(nodeuuid.v1());
|
||||||
|
|
||||||
|
var max = 10;
|
||||||
|
console.log('node-uuid:');
|
||||||
|
ids = [];
|
||||||
|
for (var i = 0; i < max; i++) ids.push(nodeuuid.v1());
|
||||||
|
compare(ids);
|
||||||
|
|
||||||
|
console.log('');
|
||||||
|
console.log('uuidjs:');
|
||||||
|
ids = [];
|
||||||
|
for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString());
|
||||||
|
compare(ids);
|
||||||
|
|
||||||
|
console.log('');
|
||||||
|
console.log('libuuid:');
|
||||||
|
ids = [];
|
||||||
|
var count = 0;
|
||||||
|
var last = function() {
|
||||||
|
compare(ids);
|
||||||
|
}
|
||||||
|
var cb = function(err, stdout, stderr) {
|
||||||
|
ids.push(stdout.substring(0, stdout.length-1));
|
||||||
|
count++;
|
||||||
|
if (count < max) {
|
||||||
|
return next();
|
||||||
|
}
|
||||||
|
last();
|
||||||
|
};
|
||||||
|
var next = function() {
|
||||||
|
exec(uuidCmd, cb);
|
||||||
|
};
|
||||||
|
next();
|
17
src/node_modules/request/node_modules/node-uuid/test/test.html
generated
vendored
Normal file
17
src/node_modules/request/node_modules/node-uuid/test/test.html
generated
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 8pt;
|
||||||
|
}
|
||||||
|
div.log {color: #444;}
|
||||||
|
div.warn {color: #550;}
|
||||||
|
div.error {color: #800; font-weight: bold;}
|
||||||
|
</style>
|
||||||
|
<script src="../uuid.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script src="./test.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
231
src/node_modules/request/node_modules/node-uuid/test/test.js
generated
vendored
Normal file
231
src/node_modules/request/node_modules/node-uuid/test/test.js
generated
vendored
Normal file
@ -0,0 +1,231 @@
|
|||||||
|
if (!this.uuid) {
|
||||||
|
// node.js
|
||||||
|
uuid = require('../uuid');
|
||||||
|
if (!/_rb/.test(uuid._rng.toString())) {
|
||||||
|
throw new Error("should use crypto for node.js");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// x-platform log/assert shims
|
||||||
|
//
|
||||||
|
|
||||||
|
function _log(msg, type) {
|
||||||
|
type = type || 'log';
|
||||||
|
|
||||||
|
if (typeof(document) != 'undefined') {
|
||||||
|
document.write('<div class="' + type + '">' + msg.replace(/\n/g, '<br />') + '</div>');
|
||||||
|
}
|
||||||
|
if (typeof(console) != 'undefined') {
|
||||||
|
var color = {
|
||||||
|
log: '\033[39m',
|
||||||
|
warn: '\033[33m',
|
||||||
|
error: '\033[31m'
|
||||||
|
};
|
||||||
|
console[type](color[type] + msg + color.log);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function log(msg) {_log(msg, 'log');}
|
||||||
|
function warn(msg) {_log(msg, 'warn');}
|
||||||
|
function error(msg) {_log(msg, 'error');}
|
||||||
|
|
||||||
|
function assert(res, msg) {
|
||||||
|
if (!res) {
|
||||||
|
error('FAIL: ' + msg);
|
||||||
|
} else {
|
||||||
|
log('Pass: ' + msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Unit tests
|
||||||
|
//
|
||||||
|
|
||||||
|
// Verify ordering of v1 ids created with explicit times
|
||||||
|
var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00
|
||||||
|
|
||||||
|
function compare(name, ids) {
|
||||||
|
ids = ids.map(function(id) {
|
||||||
|
return id.split('-').reverse().join('-');
|
||||||
|
}).sort();
|
||||||
|
var sorted = ([].concat(ids)).sort();
|
||||||
|
|
||||||
|
assert(sorted.toString() == ids.toString(), name + ' have expected order');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify ordering of v1 ids created using default behavior
|
||||||
|
compare('uuids with current time', [
|
||||||
|
uuid.v1(),
|
||||||
|
uuid.v1(),
|
||||||
|
uuid.v1(),
|
||||||
|
uuid.v1(),
|
||||||
|
uuid.v1()
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Verify ordering of v1 ids created with explicit times
|
||||||
|
compare('uuids with time option', [
|
||||||
|
uuid.v1({msecs: TIME - 10*3600*1000}),
|
||||||
|
uuid.v1({msecs: TIME - 1}),
|
||||||
|
uuid.v1({msecs: TIME}),
|
||||||
|
uuid.v1({msecs: TIME + 1}),
|
||||||
|
uuid.v1({msecs: TIME + 28*24*3600*1000})
|
||||||
|
]);
|
||||||
|
|
||||||
|
assert(
|
||||||
|
uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}),
|
||||||
|
'IDs created at same msec are different'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Verify throw if too many ids created
|
||||||
|
var thrown = false;
|
||||||
|
try {
|
||||||
|
uuid.v1({msecs: TIME, nsecs: 10000});
|
||||||
|
} catch (e) {
|
||||||
|
thrown = true;
|
||||||
|
}
|
||||||
|
assert(thrown, 'Exception thrown when > 10K ids created in 1 ms');
|
||||||
|
|
||||||
|
// Verify clock regression bumps clockseq
|
||||||
|
var uidt = uuid.v1({msecs: TIME});
|
||||||
|
var uidtb = uuid.v1({msecs: TIME - 1});
|
||||||
|
assert(
|
||||||
|
parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1,
|
||||||
|
'Clock regression by msec increments the clockseq'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Verify clock regression bumps clockseq
|
||||||
|
var uidtn = uuid.v1({msecs: TIME, nsecs: 10});
|
||||||
|
var uidtnb = uuid.v1({msecs: TIME, nsecs: 9});
|
||||||
|
assert(
|
||||||
|
parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1,
|
||||||
|
'Clock regression by nsec increments the clockseq'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Verify explicit options produce expected id
|
||||||
|
var id = uuid.v1({
|
||||||
|
msecs: 1321651533573,
|
||||||
|
nsecs: 5432,
|
||||||
|
clockseq: 0x385c,
|
||||||
|
node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ]
|
||||||
|
});
|
||||||
|
assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id');
|
||||||
|
|
||||||
|
// Verify adjacent ids across a msec boundary are 1 time unit apart
|
||||||
|
var u0 = uuid.v1({msecs: TIME, nsecs: 9999});
|
||||||
|
var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0});
|
||||||
|
|
||||||
|
var before = u0.split('-')[0], after = u1.split('-')[0];
|
||||||
|
var dt = parseInt(after, 16) - parseInt(before, 16);
|
||||||
|
assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart');
|
||||||
|
|
||||||
|
//
|
||||||
|
// Test parse/unparse
|
||||||
|
//
|
||||||
|
|
||||||
|
id = '00112233445566778899aabbccddeeff';
|
||||||
|
assert(uuid.unparse(uuid.parse(id.substr(0,10))) ==
|
||||||
|
'00112233-4400-0000-0000-000000000000', 'Short parse');
|
||||||
|
assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) ==
|
||||||
|
'00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse');
|
||||||
|
|
||||||
|
//
|
||||||
|
// Perf tests
|
||||||
|
//
|
||||||
|
|
||||||
|
var generators = {
|
||||||
|
v1: uuid.v1,
|
||||||
|
v4: uuid.v4
|
||||||
|
};
|
||||||
|
|
||||||
|
var UUID_FORMAT = {
|
||||||
|
v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i,
|
||||||
|
v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i
|
||||||
|
};
|
||||||
|
|
||||||
|
var N = 1e4;
|
||||||
|
|
||||||
|
// Get %'age an actual value differs from the ideal value
|
||||||
|
function divergence(actual, ideal) {
|
||||||
|
return Math.round(100*100*(actual - ideal)/ideal)/100;
|
||||||
|
}
|
||||||
|
|
||||||
|
function rate(msg, t) {
|
||||||
|
log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second');
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var version in generators) {
|
||||||
|
var counts = {}, max = 0;
|
||||||
|
var generator = generators[version];
|
||||||
|
var format = UUID_FORMAT[version];
|
||||||
|
|
||||||
|
log('\nSanity check ' + N + ' ' + version + ' uuids');
|
||||||
|
for (var i = 0, ok = 0; i < N; i++) {
|
||||||
|
id = generator();
|
||||||
|
if (!format.test(id)) {
|
||||||
|
throw Error(id + ' is not a valid UUID string');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (id != uuid.unparse(uuid.parse(id))) {
|
||||||
|
assert(fail, id + ' is not a valid id');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Count digits for our randomness check
|
||||||
|
if (version == 'v4') {
|
||||||
|
var digits = id.replace(/-/g, '').split('');
|
||||||
|
for (var j = digits.length-1; j >= 0; j--) {
|
||||||
|
var c = digits[j];
|
||||||
|
max = Math.max(max, counts[c] = (counts[c] || 0) + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check randomness for v4 UUIDs
|
||||||
|
if (version == 'v4') {
|
||||||
|
// Limit that we get worried about randomness. (Purely empirical choice, this!)
|
||||||
|
var limit = 2*100*Math.sqrt(1/N);
|
||||||
|
|
||||||
|
log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)');
|
||||||
|
|
||||||
|
for (var i = 0; i < 16; i++) {
|
||||||
|
var c = i.toString(16);
|
||||||
|
var bar = '', n = counts[c], p = Math.round(n/max*100|0);
|
||||||
|
|
||||||
|
// 1-3,5-8, and D-F: 1:16 odds over 30 digits
|
||||||
|
var ideal = N*30/16;
|
||||||
|
if (i == 4) {
|
||||||
|
// 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits
|
||||||
|
ideal = N*(1 + 30/16);
|
||||||
|
} else if (i >= 8 && i <= 11) {
|
||||||
|
// 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits
|
||||||
|
ideal = N*(1/4 + 30/16);
|
||||||
|
} else {
|
||||||
|
// Otherwise: 1:16 odds on 30 digits
|
||||||
|
ideal = N*30/16;
|
||||||
|
}
|
||||||
|
var d = divergence(n, ideal);
|
||||||
|
|
||||||
|
// Draw bar using UTF squares (just for grins)
|
||||||
|
var s = n/max*50 | 0;
|
||||||
|
while (s--) bar += '=';
|
||||||
|
|
||||||
|
assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perf tests
|
||||||
|
for (var version in generators) {
|
||||||
|
log('\nPerformance testing ' + version + ' UUIDs');
|
||||||
|
var generator = generators[version];
|
||||||
|
var buf = new uuid.BufferClass(16);
|
||||||
|
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) generator();
|
||||||
|
rate('uuid.' + version + '()', t);
|
||||||
|
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) generator('binary');
|
||||||
|
rate('uuid.' + version + '(\'binary\')', t);
|
||||||
|
|
||||||
|
for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf);
|
||||||
|
rate('uuid.' + version + '(\'binary\', buffer)', t);
|
||||||
|
}
|
272
src/node_modules/request/node_modules/node-uuid/uuid.js
generated
vendored
Normal file
272
src/node_modules/request/node_modules/node-uuid/uuid.js
generated
vendored
Normal file
@ -0,0 +1,272 @@
|
|||||||
|
// uuid.js
|
||||||
|
//
|
||||||
|
// Copyright (c) 2010-2012 Robert Kieffer
|
||||||
|
// MIT License - http://opensource.org/licenses/mit-license.php
|
||||||
|
|
||||||
|
/*global window, require, define */
|
||||||
|
(function(_window) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Unique ID creation requires a high quality random # generator. We feature
|
||||||
|
// detect to determine the best RNG source, normalizing to a function that
|
||||||
|
// returns 128-bits of randomness, since that's what's usually required
|
||||||
|
var _rng, _mathRNG, _nodeRNG, _whatwgRNG, _previousRoot;
|
||||||
|
|
||||||
|
function setupBrowser() {
|
||||||
|
// Allow for MSIE11 msCrypto
|
||||||
|
var _crypto = _window.crypto || _window.msCrypto;
|
||||||
|
|
||||||
|
if (!_rng && _crypto && _crypto.getRandomValues) {
|
||||||
|
// WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto
|
||||||
|
//
|
||||||
|
// Moderately fast, high quality
|
||||||
|
try {
|
||||||
|
var _rnds8 = new Uint8Array(16);
|
||||||
|
_whatwgRNG = _rng = function whatwgRNG() {
|
||||||
|
_crypto.getRandomValues(_rnds8);
|
||||||
|
return _rnds8;
|
||||||
|
};
|
||||||
|
_rng();
|
||||||
|
} catch(e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_rng) {
|
||||||
|
// Math.random()-based (RNG)
|
||||||
|
//
|
||||||
|
// If all else fails, use Math.random(). It's fast, but is of unspecified
|
||||||
|
// quality.
|
||||||
|
var _rnds = new Array(16);
|
||||||
|
_mathRNG = _rng = function() {
|
||||||
|
for (var i = 0, r; i < 16; i++) {
|
||||||
|
if ((i & 0x03) === 0) { r = Math.random() * 0x100000000; }
|
||||||
|
_rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _rnds;
|
||||||
|
};
|
||||||
|
if ('undefined' !== typeof console && console.warn) {
|
||||||
|
console.warn("[SECURITY] node-uuid: crypto not usable, falling back to insecure Math.random()");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setupNode() {
|
||||||
|
// Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html
|
||||||
|
//
|
||||||
|
// Moderately fast, high quality
|
||||||
|
if ('function' === typeof require) {
|
||||||
|
try {
|
||||||
|
var _rb = require('crypto').randomBytes;
|
||||||
|
_nodeRNG = _rng = _rb && function() {return _rb(16);};
|
||||||
|
_rng();
|
||||||
|
} catch(e) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_window) {
|
||||||
|
setupBrowser();
|
||||||
|
} else {
|
||||||
|
setupNode();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Buffer class to use
|
||||||
|
var BufferClass = ('function' === typeof Buffer) ? Buffer : Array;
|
||||||
|
|
||||||
|
// Maps for number <-> hex string conversion
|
||||||
|
var _byteToHex = [];
|
||||||
|
var _hexToByte = {};
|
||||||
|
for (var i = 0; i < 256; i++) {
|
||||||
|
_byteToHex[i] = (i + 0x100).toString(16).substr(1);
|
||||||
|
_hexToByte[_byteToHex[i]] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// **`parse()` - Parse a UUID into it's component bytes**
|
||||||
|
function parse(s, buf, offset) {
|
||||||
|
var i = (buf && offset) || 0, ii = 0;
|
||||||
|
|
||||||
|
buf = buf || [];
|
||||||
|
s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {
|
||||||
|
if (ii < 16) { // Don't overflow!
|
||||||
|
buf[i + ii++] = _hexToByte[oct];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Zero out remaining bytes if string was short
|
||||||
|
while (ii < 16) {
|
||||||
|
buf[i + ii++] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
// **`unparse()` - Convert UUID byte array (ala parse()) into a string**
|
||||||
|
function unparse(buf, offset) {
|
||||||
|
var i = offset || 0, bth = _byteToHex;
|
||||||
|
return bth[buf[i++]] + bth[buf[i++]] +
|
||||||
|
bth[buf[i++]] + bth[buf[i++]] + '-' +
|
||||||
|
bth[buf[i++]] + bth[buf[i++]] + '-' +
|
||||||
|
bth[buf[i++]] + bth[buf[i++]] + '-' +
|
||||||
|
bth[buf[i++]] + bth[buf[i++]] + '-' +
|
||||||
|
bth[buf[i++]] + bth[buf[i++]] +
|
||||||
|
bth[buf[i++]] + bth[buf[i++]] +
|
||||||
|
bth[buf[i++]] + bth[buf[i++]];
|
||||||
|
}
|
||||||
|
|
||||||
|
// **`v1()` - Generate time-based UUID**
|
||||||
|
//
|
||||||
|
// Inspired by https://github.com/LiosK/UUID.js
|
||||||
|
// and http://docs.python.org/library/uuid.html
|
||||||
|
|
||||||
|
// random #'s we need to init node and clockseq
|
||||||
|
var _seedBytes = _rng();
|
||||||
|
|
||||||
|
// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
|
||||||
|
var _nodeId = [
|
||||||
|
_seedBytes[0] | 0x01,
|
||||||
|
_seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]
|
||||||
|
];
|
||||||
|
|
||||||
|
// Per 4.2.2, randomize (14 bit) clockseq
|
||||||
|
var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;
|
||||||
|
|
||||||
|
// Previous uuid creation time
|
||||||
|
var _lastMSecs = 0, _lastNSecs = 0;
|
||||||
|
|
||||||
|
// See https://github.com/broofa/node-uuid for API details
|
||||||
|
function v1(options, buf, offset) {
|
||||||
|
var i = buf && offset || 0;
|
||||||
|
var b = buf || [];
|
||||||
|
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
var clockseq = (options.clockseq != null) ? options.clockseq : _clockseq;
|
||||||
|
|
||||||
|
// UUID timestamps are 100 nano-second units since the Gregorian epoch,
|
||||||
|
// (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
|
||||||
|
// time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
|
||||||
|
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
|
||||||
|
var msecs = (options.msecs != null) ? options.msecs : new Date().getTime();
|
||||||
|
|
||||||
|
// Per 4.2.1.2, use count of uuid's generated during the current clock
|
||||||
|
// cycle to simulate higher resolution clock
|
||||||
|
var nsecs = (options.nsecs != null) ? options.nsecs : _lastNSecs + 1;
|
||||||
|
|
||||||
|
// Time since last uuid creation (in msecs)
|
||||||
|
var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;
|
||||||
|
|
||||||
|
// Per 4.2.1.2, Bump clockseq on clock regression
|
||||||
|
if (dt < 0 && options.clockseq == null) {
|
||||||
|
clockseq = clockseq + 1 & 0x3fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
|
||||||
|
// time interval
|
||||||
|
if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) {
|
||||||
|
nsecs = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Per 4.2.1.2 Throw error if too many uuids are requested
|
||||||
|
if (nsecs >= 10000) {
|
||||||
|
throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
|
||||||
|
}
|
||||||
|
|
||||||
|
_lastMSecs = msecs;
|
||||||
|
_lastNSecs = nsecs;
|
||||||
|
_clockseq = clockseq;
|
||||||
|
|
||||||
|
// Per 4.1.4 - Convert from unix epoch to Gregorian epoch
|
||||||
|
msecs += 12219292800000;
|
||||||
|
|
||||||
|
// `time_low`
|
||||||
|
var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
|
||||||
|
b[i++] = tl >>> 24 & 0xff;
|
||||||
|
b[i++] = tl >>> 16 & 0xff;
|
||||||
|
b[i++] = tl >>> 8 & 0xff;
|
||||||
|
b[i++] = tl & 0xff;
|
||||||
|
|
||||||
|
// `time_mid`
|
||||||
|
var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;
|
||||||
|
b[i++] = tmh >>> 8 & 0xff;
|
||||||
|
b[i++] = tmh & 0xff;
|
||||||
|
|
||||||
|
// `time_high_and_version`
|
||||||
|
b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
|
||||||
|
b[i++] = tmh >>> 16 & 0xff;
|
||||||
|
|
||||||
|
// `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
|
||||||
|
b[i++] = clockseq >>> 8 | 0x80;
|
||||||
|
|
||||||
|
// `clock_seq_low`
|
||||||
|
b[i++] = clockseq & 0xff;
|
||||||
|
|
||||||
|
// `node`
|
||||||
|
var node = options.node || _nodeId;
|
||||||
|
for (var n = 0; n < 6; n++) {
|
||||||
|
b[i + n] = node[n];
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf ? buf : unparse(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
// **`v4()` - Generate random UUID**
|
||||||
|
|
||||||
|
// See https://github.com/broofa/node-uuid for API details
|
||||||
|
function v4(options, buf, offset) {
|
||||||
|
// Deprecated - 'format' argument, as supported in v1.2
|
||||||
|
var i = buf && offset || 0;
|
||||||
|
|
||||||
|
if (typeof(options) === 'string') {
|
||||||
|
buf = (options === 'binary') ? new BufferClass(16) : null;
|
||||||
|
options = null;
|
||||||
|
}
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
var rnds = options.random || (options.rng || _rng)();
|
||||||
|
|
||||||
|
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
||||||
|
rnds[6] = (rnds[6] & 0x0f) | 0x40;
|
||||||
|
rnds[8] = (rnds[8] & 0x3f) | 0x80;
|
||||||
|
|
||||||
|
// Copy bytes to buffer, if provided
|
||||||
|
if (buf) {
|
||||||
|
for (var ii = 0; ii < 16; ii++) {
|
||||||
|
buf[i + ii] = rnds[ii];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf || unparse(rnds);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Export public API
|
||||||
|
var uuid = v4;
|
||||||
|
uuid.v1 = v1;
|
||||||
|
uuid.v4 = v4;
|
||||||
|
uuid.parse = parse;
|
||||||
|
uuid.unparse = unparse;
|
||||||
|
uuid.BufferClass = BufferClass;
|
||||||
|
uuid._rng = _rng;
|
||||||
|
uuid._mathRNG = _mathRNG;
|
||||||
|
uuid._nodeRNG = _nodeRNG;
|
||||||
|
uuid._whatwgRNG = _whatwgRNG;
|
||||||
|
|
||||||
|
if (('undefined' !== typeof module) && module.exports) {
|
||||||
|
// Publish as node.js module
|
||||||
|
module.exports = uuid;
|
||||||
|
} else if (typeof define === 'function' && define.amd) {
|
||||||
|
// Publish as AMD module
|
||||||
|
define(function() {return uuid;});
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Publish as global (in browsers)
|
||||||
|
_previousRoot = _window.uuid;
|
||||||
|
|
||||||
|
// **`noConflict()` - (browser only) to reset global 'uuid' var**
|
||||||
|
uuid.noConflict = function() {
|
||||||
|
_window.uuid = _previousRoot;
|
||||||
|
return uuid;
|
||||||
|
};
|
||||||
|
|
||||||
|
_window.uuid = uuid;
|
||||||
|
}
|
||||||
|
})('undefined' !== typeof window ? window : null);
|
5
src/node_modules/request/node_modules/tunnel-agent/.jshintrc
generated
vendored
Normal file
5
src/node_modules/request/node_modules/tunnel-agent/.jshintrc
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"node": true,
|
||||||
|
"asi": true,
|
||||||
|
"laxcomma": true
|
||||||
|
}
|
55
src/node_modules/request/node_modules/tunnel-agent/LICENSE
generated
vendored
Normal file
55
src/node_modules/request/node_modules/tunnel-agent/LICENSE
generated
vendored
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
Apache License
|
||||||
|
|
||||||
|
Version 2.0, January 2004
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
|
||||||
|
|
||||||
|
You must give any other recipients of the Work or Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
You must cause any modified files to carry prominent notices stating that You changed the files; and
|
||||||
|
|
||||||
|
You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
|
||||||
|
|
||||||
|
If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
4
src/node_modules/request/node_modules/tunnel-agent/README.md
generated
vendored
Normal file
4
src/node_modules/request/node_modules/tunnel-agent/README.md
generated
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
tunnel-agent
|
||||||
|
============
|
||||||
|
|
||||||
|
HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.
|
243
src/node_modules/request/node_modules/tunnel-agent/index.js
generated
vendored
Normal file
243
src/node_modules/request/node_modules/tunnel-agent/index.js
generated
vendored
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
var net = require('net')
|
||||||
|
, tls = require('tls')
|
||||||
|
, http = require('http')
|
||||||
|
, https = require('https')
|
||||||
|
, events = require('events')
|
||||||
|
, assert = require('assert')
|
||||||
|
, util = require('util')
|
||||||
|
;
|
||||||
|
|
||||||
|
exports.httpOverHttp = httpOverHttp
|
||||||
|
exports.httpsOverHttp = httpsOverHttp
|
||||||
|
exports.httpOverHttps = httpOverHttps
|
||||||
|
exports.httpsOverHttps = httpsOverHttps
|
||||||
|
|
||||||
|
|
||||||
|
function httpOverHttp(options) {
|
||||||
|
var agent = new TunnelingAgent(options)
|
||||||
|
agent.request = http.request
|
||||||
|
return agent
|
||||||
|
}
|
||||||
|
|
||||||
|
function httpsOverHttp(options) {
|
||||||
|
var agent = new TunnelingAgent(options)
|
||||||
|
agent.request = http.request
|
||||||
|
agent.createSocket = createSecureSocket
|
||||||
|
agent.defaultPort = 443
|
||||||
|
return agent
|
||||||
|
}
|
||||||
|
|
||||||
|
function httpOverHttps(options) {
|
||||||
|
var agent = new TunnelingAgent(options)
|
||||||
|
agent.request = https.request
|
||||||
|
return agent
|
||||||
|
}
|
||||||
|
|
||||||
|
function httpsOverHttps(options) {
|
||||||
|
var agent = new TunnelingAgent(options)
|
||||||
|
agent.request = https.request
|
||||||
|
agent.createSocket = createSecureSocket
|
||||||
|
agent.defaultPort = 443
|
||||||
|
return agent
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function TunnelingAgent(options) {
|
||||||
|
var self = this
|
||||||
|
self.options = options || {}
|
||||||
|
self.proxyOptions = self.options.proxy || {}
|
||||||
|
self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets
|
||||||
|
self.requests = []
|
||||||
|
self.sockets = []
|
||||||
|
|
||||||
|
self.on('free', function onFree(socket, host, port) {
|
||||||
|
for (var i = 0, len = self.requests.length; i < len; ++i) {
|
||||||
|
var pending = self.requests[i]
|
||||||
|
if (pending.host === host && pending.port === port) {
|
||||||
|
// Detect the request to connect same origin server,
|
||||||
|
// reuse the connection.
|
||||||
|
self.requests.splice(i, 1)
|
||||||
|
pending.request.onSocket(socket)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
socket.destroy()
|
||||||
|
self.removeSocket(socket)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
util.inherits(TunnelingAgent, events.EventEmitter)
|
||||||
|
|
||||||
|
TunnelingAgent.prototype.addRequest = function addRequest(req, options) {
|
||||||
|
var self = this
|
||||||
|
|
||||||
|
// Legacy API: addRequest(req, host, port, path)
|
||||||
|
if (typeof options === 'string') {
|
||||||
|
options = {
|
||||||
|
host: options,
|
||||||
|
port: arguments[2],
|
||||||
|
path: arguments[3]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.sockets.length >= this.maxSockets) {
|
||||||
|
// We are over limit so we'll add it to the queue.
|
||||||
|
self.requests.push({host: options.host, port: options.port, request: req})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we are under maxSockets create a new one.
|
||||||
|
self.createConnection({host: options.host, port: options.port, request: req})
|
||||||
|
}
|
||||||
|
|
||||||
|
TunnelingAgent.prototype.createConnection = function createConnection(pending) {
|
||||||
|
var self = this
|
||||||
|
|
||||||
|
self.createSocket(pending, function(socket) {
|
||||||
|
socket.on('free', onFree)
|
||||||
|
socket.on('close', onCloseOrRemove)
|
||||||
|
socket.on('agentRemove', onCloseOrRemove)
|
||||||
|
pending.request.onSocket(socket)
|
||||||
|
|
||||||
|
function onFree() {
|
||||||
|
self.emit('free', socket, pending.host, pending.port)
|
||||||
|
}
|
||||||
|
|
||||||
|
function onCloseOrRemove(err) {
|
||||||
|
self.removeSocket(socket)
|
||||||
|
socket.removeListener('free', onFree)
|
||||||
|
socket.removeListener('close', onCloseOrRemove)
|
||||||
|
socket.removeListener('agentRemove', onCloseOrRemove)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
|
||||||
|
var self = this
|
||||||
|
var placeholder = {}
|
||||||
|
self.sockets.push(placeholder)
|
||||||
|
|
||||||
|
var connectOptions = mergeOptions({}, self.proxyOptions,
|
||||||
|
{ method: 'CONNECT'
|
||||||
|
, path: options.host + ':' + options.port
|
||||||
|
, agent: false
|
||||||
|
}
|
||||||
|
)
|
||||||
|
if (connectOptions.proxyAuth) {
|
||||||
|
connectOptions.headers = connectOptions.headers || {}
|
||||||
|
connectOptions.headers['Proxy-Authorization'] = 'Basic ' +
|
||||||
|
new Buffer(connectOptions.proxyAuth).toString('base64')
|
||||||
|
}
|
||||||
|
|
||||||
|
debug('making CONNECT request')
|
||||||
|
var connectReq = self.request(connectOptions)
|
||||||
|
connectReq.useChunkedEncodingByDefault = false // for v0.6
|
||||||
|
connectReq.once('response', onResponse) // for v0.6
|
||||||
|
connectReq.once('upgrade', onUpgrade) // for v0.6
|
||||||
|
connectReq.once('connect', onConnect) // for v0.7 or later
|
||||||
|
connectReq.once('error', onError)
|
||||||
|
connectReq.end()
|
||||||
|
|
||||||
|
function onResponse(res) {
|
||||||
|
// Very hacky. This is necessary to avoid http-parser leaks.
|
||||||
|
res.upgrade = true
|
||||||
|
}
|
||||||
|
|
||||||
|
function onUpgrade(res, socket, head) {
|
||||||
|
// Hacky.
|
||||||
|
process.nextTick(function() {
|
||||||
|
onConnect(res, socket, head)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function onConnect(res, socket, head) {
|
||||||
|
connectReq.removeAllListeners()
|
||||||
|
socket.removeAllListeners()
|
||||||
|
|
||||||
|
if (res.statusCode === 200) {
|
||||||
|
assert.equal(head.length, 0)
|
||||||
|
debug('tunneling connection has established')
|
||||||
|
self.sockets[self.sockets.indexOf(placeholder)] = socket
|
||||||
|
cb(socket)
|
||||||
|
} else {
|
||||||
|
debug('tunneling socket could not be established, statusCode=%d', res.statusCode)
|
||||||
|
var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode)
|
||||||
|
error.code = 'ECONNRESET'
|
||||||
|
options.request.emit('error', error)
|
||||||
|
self.removeSocket(placeholder)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function onError(cause) {
|
||||||
|
connectReq.removeAllListeners()
|
||||||
|
|
||||||
|
debug('tunneling socket could not be established, cause=%s\n', cause.message, cause.stack)
|
||||||
|
var error = new Error('tunneling socket could not be established, ' + 'cause=' + cause.message)
|
||||||
|
error.code = 'ECONNRESET'
|
||||||
|
options.request.emit('error', error)
|
||||||
|
self.removeSocket(placeholder)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
|
||||||
|
var pos = this.sockets.indexOf(socket)
|
||||||
|
if (pos === -1) return
|
||||||
|
|
||||||
|
this.sockets.splice(pos, 1)
|
||||||
|
|
||||||
|
var pending = this.requests.shift()
|
||||||
|
if (pending) {
|
||||||
|
// If we have pending requests and a socket gets closed a new one
|
||||||
|
// needs to be created to take over in the pool for the one that closed.
|
||||||
|
this.createConnection(pending)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function createSecureSocket(options, cb) {
|
||||||
|
var self = this
|
||||||
|
TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {
|
||||||
|
// 0 is dummy port for v0.6
|
||||||
|
var secureSocket = tls.connect(0, mergeOptions({}, self.options,
|
||||||
|
{ servername: options.host
|
||||||
|
, socket: socket
|
||||||
|
}
|
||||||
|
))
|
||||||
|
self.sockets[self.sockets.indexOf(socket)] = secureSocket
|
||||||
|
cb(secureSocket)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function mergeOptions(target) {
|
||||||
|
for (var i = 1, len = arguments.length; i < len; ++i) {
|
||||||
|
var overrides = arguments[i]
|
||||||
|
if (typeof overrides === 'object') {
|
||||||
|
var keys = Object.keys(overrides)
|
||||||
|
for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {
|
||||||
|
var k = keys[j]
|
||||||
|
if (overrides[k] !== undefined) {
|
||||||
|
target[k] = overrides[k]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return target
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var debug
|
||||||
|
if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
|
||||||
|
debug = function() {
|
||||||
|
var args = Array.prototype.slice.call(arguments)
|
||||||
|
if (typeof args[0] === 'string') {
|
||||||
|
args[0] = 'TUNNEL: ' + args[0]
|
||||||
|
} else {
|
||||||
|
args.unshift('TUNNEL:')
|
||||||
|
}
|
||||||
|
console.error.apply(console, args)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
debug = function() {}
|
||||||
|
}
|
||||||
|
exports.debug = debug // for test
|
85
src/node_modules/request/node_modules/tunnel-agent/package.json
generated
vendored
Normal file
85
src/node_modules/request/node_modules/tunnel-agent/package.json
generated
vendored
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
{
|
||||||
|
"_args": [
|
||||||
|
[
|
||||||
|
"tunnel-agent@~0.4.1",
|
||||||
|
"/media/Github/Vertinext/src/node_modules/request"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"_from": "tunnel-agent@>=0.4.1 <0.5.0",
|
||||||
|
"_id": "tunnel-agent@0.4.2",
|
||||||
|
"_inCache": true,
|
||||||
|
"_installable": true,
|
||||||
|
"_location": "/request/tunnel-agent",
|
||||||
|
"_nodeVersion": "5.0.0",
|
||||||
|
"_npmUser": {
|
||||||
|
"email": "simeonvelichkov@gmail.com",
|
||||||
|
"name": "simov"
|
||||||
|
},
|
||||||
|
"_npmVersion": "3.3.12",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"name": "tunnel-agent",
|
||||||
|
"raw": "tunnel-agent@~0.4.1",
|
||||||
|
"rawSpec": "~0.4.1",
|
||||||
|
"scope": null,
|
||||||
|
"spec": ">=0.4.1 <0.5.0",
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/request"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.2.tgz",
|
||||||
|
"_shasum": "1104e3f36ac87125c287270067d582d18133bfee",
|
||||||
|
"_shrinkwrap": null,
|
||||||
|
"_spec": "tunnel-agent@~0.4.1",
|
||||||
|
"_where": "/media/Github/Vertinext/src/node_modules/request",
|
||||||
|
"author": {
|
||||||
|
"email": "mikeal.rogers@gmail.com",
|
||||||
|
"name": "Mikeal Rogers",
|
||||||
|
"url": "http://www.futurealoof.com"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/mikeal/tunnel-agent/issues"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"description": "HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.",
|
||||||
|
"devDependencies": {},
|
||||||
|
"directories": {},
|
||||||
|
"dist": {
|
||||||
|
"shasum": "1104e3f36ac87125c287270067d582d18133bfee",
|
||||||
|
"tarball": "http://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.2.tgz"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
},
|
||||||
|
"gitHead": "449634d1054949f9f145f4925985a8dea0f46b0f",
|
||||||
|
"homepage": "https://github.com/mikeal/tunnel-agent#readme",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"email": "mikeal.rogers@gmail.com",
|
||||||
|
"name": "mikeal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"email": "jnylen@gmail.com",
|
||||||
|
"name": "nylen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"email": "fkschott@gmail.com",
|
||||||
|
"name": "fredkschott"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"email": "simeonvelichkov@gmail.com",
|
||||||
|
"name": "simov"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "tunnel-agent",
|
||||||
|
"optionalDependencies": {},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"repository": {
|
||||||
|
"url": "git+https://github.com/mikeal/tunnel-agent.git"
|
||||||
|
},
|
||||||
|
"scripts": {},
|
||||||
|
"version": "0.4.2"
|
||||||
|
}
|
1
src/node_modules/weinre/node_modules/.bin/nopt
generated
vendored
Symbolic link
1
src/node_modules/weinre/node_modules/.bin/nopt
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../nopt/bin/nopt.js
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user