Detailansicht verbessert
This commit is contained in:
		
							
								
								
									
										6
									
								
								express-server/node_modules/cross-spawn/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								express-server/node_modules/cross-spawn/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
## 5.0.0 - 2016-10-30
 | 
			
		||||
 | 
			
		||||
- Add support for `options.shell`
 | 
			
		||||
- Improve parsing of shebangs by using [`shebang-command`](https://github.com/kevva/shebang-command) module
 | 
			
		||||
- Refactor some code to make it more clear
 | 
			
		||||
- Update README caveats
 | 
			
		||||
							
								
								
									
										19
									
								
								express-server/node_modules/cross-spawn/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								express-server/node_modules/cross-spawn/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
Copyright (c) 2014 IndigoUnited
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
							
								
								
									
										85
									
								
								express-server/node_modules/cross-spawn/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								express-server/node_modules/cross-spawn/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
# cross-spawn
 | 
			
		||||
 | 
			
		||||
[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Build status][appveyor-image]][appveyor-url] [![Dependency status][david-dm-image]][david-dm-url] [![Dev Dependency status][david-dm-dev-image]][david-dm-dev-url]
 | 
			
		||||
 | 
			
		||||
[npm-url]:https://npmjs.org/package/cross-spawn
 | 
			
		||||
[downloads-image]:http://img.shields.io/npm/dm/cross-spawn.svg
 | 
			
		||||
[npm-image]:http://img.shields.io/npm/v/cross-spawn.svg
 | 
			
		||||
[travis-url]:https://travis-ci.org/IndigoUnited/node-cross-spawn
 | 
			
		||||
[travis-image]:http://img.shields.io/travis/IndigoUnited/node-cross-spawn/master.svg
 | 
			
		||||
[appveyor-url]:https://ci.appveyor.com/project/satazor/node-cross-spawn
 | 
			
		||||
[appveyor-image]:https://img.shields.io/appveyor/ci/satazor/node-cross-spawn/master.svg
 | 
			
		||||
[david-dm-url]:https://david-dm.org/IndigoUnited/node-cross-spawn
 | 
			
		||||
[david-dm-image]:https://img.shields.io/david/IndigoUnited/node-cross-spawn.svg
 | 
			
		||||
[david-dm-dev-url]:https://david-dm.org/IndigoUnited/node-cross-spawn#info=devDependencies
 | 
			
		||||
[david-dm-dev-image]:https://img.shields.io/david/dev/IndigoUnited/node-cross-spawn.svg
 | 
			
		||||
 | 
			
		||||
A cross platform solution to node's spawn and spawnSync.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
`$ npm install cross-spawn`
 | 
			
		||||
 | 
			
		||||
If you are using `spawnSync` on node 0.10 or older, you will also need to install `spawn-sync`:
 | 
			
		||||
 | 
			
		||||
`$ npm install spawn-sync`
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Why
 | 
			
		||||
 | 
			
		||||
Node has issues when using spawn on Windows:
 | 
			
		||||
 | 
			
		||||
- It ignores [PATHEXT](https://github.com/joyent/node/issues/2318)
 | 
			
		||||
- It does not support [shebangs](http://pt.wikipedia.org/wiki/Shebang)
 | 
			
		||||
- No `options.shell` support on node < v6
 | 
			
		||||
- It does not allow you to run `del` or `dir`
 | 
			
		||||
 | 
			
		||||
All these issues are handled correctly by `cross-spawn`.
 | 
			
		||||
There are some known modules, such as [win-spawn](https://github.com/ForbesLindesay/win-spawn), that try to solve this but they are either broken or provide faulty escaping of shell arguments.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
Exactly the same way as node's [`spawn`](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options) or [`spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options), so it's a drop in replacement.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
var spawn = require('cross-spawn');
 | 
			
		||||
 | 
			
		||||
// Spawn NPM asynchronously
 | 
			
		||||
var child = spawn('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });
 | 
			
		||||
 | 
			
		||||
// Spawn NPM synchronously
 | 
			
		||||
var results = spawn.sync('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Caveats
 | 
			
		||||
 | 
			
		||||
#### `options.shell` as an alternative to `cross-spawn`
 | 
			
		||||
 | 
			
		||||
Starting from node v6, `spawn` has a `shell` option that allows you run commands from within a shell. This new option solves most of the problems that `cross-spawn` attempts to solve, but:
 | 
			
		||||
 | 
			
		||||
- It's not supported in node < v6
 | 
			
		||||
- It has no support for shebangs on Windows
 | 
			
		||||
- You must manually escape the command and arguments which is very error prone, specially when passing user input
 | 
			
		||||
 | 
			
		||||
If you are using the `shell` option to spawn a command in a cross platform way, consider using `cross-spawn` instead. You have been warned.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### Shebangs
 | 
			
		||||
 | 
			
		||||
While `cross-spawn` handles shebangs on Windows, its support is limited: e.g.: it doesn't handle arguments after the path, e.g.: `#!/bin/bash -e`.
 | 
			
		||||
 | 
			
		||||
Remember to always test your code on Windows!
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Tests
 | 
			
		||||
 | 
			
		||||
`$ npm test`
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php).
 | 
			
		||||
							
								
								
									
										59
									
								
								express-server/node_modules/cross-spawn/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								express-server/node_modules/cross-spawn/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var cp = require('child_process');
 | 
			
		||||
var parse = require('./lib/parse');
 | 
			
		||||
var enoent = require('./lib/enoent');
 | 
			
		||||
 | 
			
		||||
var cpSpawnSync = cp.spawnSync;
 | 
			
		||||
 | 
			
		||||
function spawn(command, args, options) {
 | 
			
		||||
    var parsed;
 | 
			
		||||
    var spawned;
 | 
			
		||||
 | 
			
		||||
    // Parse the arguments
 | 
			
		||||
    parsed = parse(command, args, options);
 | 
			
		||||
 | 
			
		||||
    // Spawn the child process
 | 
			
		||||
    spawned = cp.spawn(parsed.command, parsed.args, parsed.options);
 | 
			
		||||
 | 
			
		||||
    // Hook into child process "exit" event to emit an error if the command
 | 
			
		||||
    // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
 | 
			
		||||
    enoent.hookChildProcess(spawned, parsed);
 | 
			
		||||
 | 
			
		||||
    return spawned;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function spawnSync(command, args, options) {
 | 
			
		||||
    var parsed;
 | 
			
		||||
    var result;
 | 
			
		||||
 | 
			
		||||
    if (!cpSpawnSync) {
 | 
			
		||||
        try {
 | 
			
		||||
            cpSpawnSync = require('spawn-sync');  // eslint-disable-line global-require
 | 
			
		||||
        } catch (ex) {
 | 
			
		||||
            throw new Error(
 | 
			
		||||
                'In order to use spawnSync on node 0.10 or older, you must ' +
 | 
			
		||||
                'install spawn-sync:\n\n' +
 | 
			
		||||
                '  npm install spawn-sync --save'
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Parse the arguments
 | 
			
		||||
    parsed = parse(command, args, options);
 | 
			
		||||
 | 
			
		||||
    // Spawn the child process
 | 
			
		||||
    result = cpSpawnSync(parsed.command, parsed.args, parsed.options);
 | 
			
		||||
 | 
			
		||||
    // Analyze if the command does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
 | 
			
		||||
    result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);
 | 
			
		||||
 | 
			
		||||
    return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = spawn;
 | 
			
		||||
module.exports.spawn = spawn;
 | 
			
		||||
module.exports.sync = spawnSync;
 | 
			
		||||
 | 
			
		||||
module.exports._parse = parse;
 | 
			
		||||
module.exports._enoent = enoent;
 | 
			
		||||
							
								
								
									
										73
									
								
								express-server/node_modules/cross-spawn/lib/enoent.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								express-server/node_modules/cross-spawn/lib/enoent.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var isWin = process.platform === 'win32';
 | 
			
		||||
var resolveCommand = require('./util/resolveCommand');
 | 
			
		||||
 | 
			
		||||
var isNode10 = process.version.indexOf('v0.10.') === 0;
 | 
			
		||||
 | 
			
		||||
function notFoundError(command, syscall) {
 | 
			
		||||
    var err;
 | 
			
		||||
 | 
			
		||||
    err = new Error(syscall + ' ' + command + ' ENOENT');
 | 
			
		||||
    err.code = err.errno = 'ENOENT';
 | 
			
		||||
    err.syscall = syscall + ' ' + command;
 | 
			
		||||
 | 
			
		||||
    return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function hookChildProcess(cp, parsed) {
 | 
			
		||||
    var originalEmit;
 | 
			
		||||
 | 
			
		||||
    if (!isWin) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    originalEmit = cp.emit;
 | 
			
		||||
    cp.emit = function (name, arg1) {
 | 
			
		||||
        var err;
 | 
			
		||||
 | 
			
		||||
        // If emitting "exit" event and exit code is 1, we need to check if
 | 
			
		||||
        // the command exists and emit an "error" instead
 | 
			
		||||
        // See: https://github.com/IndigoUnited/node-cross-spawn/issues/16
 | 
			
		||||
        if (name === 'exit') {
 | 
			
		||||
            err = verifyENOENT(arg1, parsed, 'spawn');
 | 
			
		||||
 | 
			
		||||
            if (err) {
 | 
			
		||||
                return originalEmit.call(cp, 'error', err);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return originalEmit.apply(cp, arguments);
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function verifyENOENT(status, parsed) {
 | 
			
		||||
    if (isWin && status === 1 && !parsed.file) {
 | 
			
		||||
        return notFoundError(parsed.original, 'spawn');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return null;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function verifyENOENTSync(status, parsed) {
 | 
			
		||||
    if (isWin && status === 1 && !parsed.file) {
 | 
			
		||||
        return notFoundError(parsed.original, 'spawnSync');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // If we are in node 10, then we are using spawn-sync; if it exited
 | 
			
		||||
    // with -1 it probably means that the command does not exist
 | 
			
		||||
    if (isNode10 && status === -1) {
 | 
			
		||||
        parsed.file = isWin ? parsed.file : resolveCommand(parsed.original);
 | 
			
		||||
 | 
			
		||||
        if (!parsed.file) {
 | 
			
		||||
            return notFoundError(parsed.original, 'spawnSync');
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return null;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports.hookChildProcess = hookChildProcess;
 | 
			
		||||
module.exports.verifyENOENT = verifyENOENT;
 | 
			
		||||
module.exports.verifyENOENTSync = verifyENOENTSync;
 | 
			
		||||
module.exports.notFoundError = notFoundError;
 | 
			
		||||
							
								
								
									
										113
									
								
								express-server/node_modules/cross-spawn/lib/parse.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								express-server/node_modules/cross-spawn/lib/parse.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,113 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var resolveCommand = require('./util/resolveCommand');
 | 
			
		||||
var hasEmptyArgumentBug = require('./util/hasEmptyArgumentBug');
 | 
			
		||||
var escapeArgument = require('./util/escapeArgument');
 | 
			
		||||
var escapeCommand = require('./util/escapeCommand');
 | 
			
		||||
var readShebang = require('./util/readShebang');
 | 
			
		||||
 | 
			
		||||
var isWin = process.platform === 'win32';
 | 
			
		||||
var skipShellRegExp = /\.(?:com|exe)$/i;
 | 
			
		||||
 | 
			
		||||
// Supported in Node >= 6 and >= 4.8
 | 
			
		||||
var supportsShellOption = parseInt(process.version.substr(1).split('.')[0], 10) >= 6 ||
 | 
			
		||||
 parseInt(process.version.substr(1).split('.')[0], 10) === 4 && parseInt(process.version.substr(1).split('.')[1], 10) >= 8;
 | 
			
		||||
 | 
			
		||||
function parseNonShell(parsed) {
 | 
			
		||||
    var shebang;
 | 
			
		||||
    var needsShell;
 | 
			
		||||
    var applyQuotes;
 | 
			
		||||
 | 
			
		||||
    if (!isWin) {
 | 
			
		||||
        return parsed;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Detect & add support for shebangs
 | 
			
		||||
    parsed.file = resolveCommand(parsed.command);
 | 
			
		||||
    parsed.file = parsed.file || resolveCommand(parsed.command, true);
 | 
			
		||||
    shebang = parsed.file && readShebang(parsed.file);
 | 
			
		||||
 | 
			
		||||
    if (shebang) {
 | 
			
		||||
        parsed.args.unshift(parsed.file);
 | 
			
		||||
        parsed.command = shebang;
 | 
			
		||||
        needsShell = hasEmptyArgumentBug || !skipShellRegExp.test(resolveCommand(shebang) || resolveCommand(shebang, true));
 | 
			
		||||
    } else {
 | 
			
		||||
        needsShell = hasEmptyArgumentBug || !skipShellRegExp.test(parsed.file);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // If a shell is required, use cmd.exe and take care of escaping everything correctly
 | 
			
		||||
    if (needsShell) {
 | 
			
		||||
        // Escape command & arguments
 | 
			
		||||
        applyQuotes = (parsed.command !== 'echo');  // Do not quote arguments for the special "echo" command
 | 
			
		||||
        parsed.command = escapeCommand(parsed.command);
 | 
			
		||||
        parsed.args = parsed.args.map(function (arg) {
 | 
			
		||||
            return escapeArgument(arg, applyQuotes);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        // Make use of cmd.exe
 | 
			
		||||
        parsed.args = ['/d', '/s', '/c', '"' + parsed.command + (parsed.args.length ? ' ' + parsed.args.join(' ') : '') + '"'];
 | 
			
		||||
        parsed.command = process.env.comspec || 'cmd.exe';
 | 
			
		||||
        parsed.options.windowsVerbatimArguments = true;  // Tell node's spawn that the arguments are already escaped
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return parsed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parseShell(parsed) {
 | 
			
		||||
    var shellCommand;
 | 
			
		||||
 | 
			
		||||
    // If node supports the shell option, there's no need to mimic its behavior
 | 
			
		||||
    if (supportsShellOption) {
 | 
			
		||||
        return parsed;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Mimic node shell option, see: https://github.com/nodejs/node/blob/b9f6a2dc059a1062776133f3d4fd848c4da7d150/lib/child_process.js#L335
 | 
			
		||||
    shellCommand = [parsed.command].concat(parsed.args).join(' ');
 | 
			
		||||
 | 
			
		||||
    if (isWin) {
 | 
			
		||||
        parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';
 | 
			
		||||
        parsed.args = ['/d', '/s', '/c', '"' + shellCommand + '"'];
 | 
			
		||||
        parsed.options.windowsVerbatimArguments = true;  // Tell node's spawn that the arguments are already escaped
 | 
			
		||||
    } else {
 | 
			
		||||
        if (typeof parsed.options.shell === 'string') {
 | 
			
		||||
            parsed.command = parsed.options.shell;
 | 
			
		||||
        } else if (process.platform === 'android') {
 | 
			
		||||
            parsed.command = '/system/bin/sh';
 | 
			
		||||
        } else {
 | 
			
		||||
            parsed.command = '/bin/sh';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        parsed.args = ['-c', shellCommand];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return parsed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------
 | 
			
		||||
 | 
			
		||||
function parse(command, args, options) {
 | 
			
		||||
    var parsed;
 | 
			
		||||
 | 
			
		||||
    // Normalize arguments, similar to nodejs
 | 
			
		||||
    if (args && !Array.isArray(args)) {
 | 
			
		||||
        options = args;
 | 
			
		||||
        args = null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    args = args ? args.slice(0) : [];  // Clone array to avoid changing the original
 | 
			
		||||
    options = options || {};
 | 
			
		||||
 | 
			
		||||
    // Build our parsed object
 | 
			
		||||
    parsed = {
 | 
			
		||||
        command: command,
 | 
			
		||||
        args: args,
 | 
			
		||||
        options: options,
 | 
			
		||||
        file: undefined,
 | 
			
		||||
        original: command,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // Delegate further parsing to shell or non-shell
 | 
			
		||||
    return options.shell ? parseShell(parsed) : parseNonShell(parsed);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = parse;
 | 
			
		||||
							
								
								
									
										30
									
								
								express-server/node_modules/cross-spawn/lib/util/escapeArgument.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								express-server/node_modules/cross-spawn/lib/util/escapeArgument.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
function escapeArgument(arg, quote) {
 | 
			
		||||
    // Convert to string
 | 
			
		||||
    arg = '' + arg;
 | 
			
		||||
 | 
			
		||||
    // If we are not going to quote the argument,
 | 
			
		||||
    // escape shell metacharacters, including double and single quotes:
 | 
			
		||||
    if (!quote) {
 | 
			
		||||
        arg = arg.replace(/([()%!^<>&|;,"'\s])/g, '^$1');
 | 
			
		||||
    } else {
 | 
			
		||||
        // Sequence of backslashes followed by a double quote:
 | 
			
		||||
        // double up all the backslashes and escape the double quote
 | 
			
		||||
        arg = arg.replace(/(\\*)"/g, '$1$1\\"');
 | 
			
		||||
 | 
			
		||||
        // Sequence of backslashes followed by the end of the string
 | 
			
		||||
        // (which will become a double quote later):
 | 
			
		||||
        // double up all the backslashes
 | 
			
		||||
        arg = arg.replace(/(\\*)$/, '$1$1');
 | 
			
		||||
 | 
			
		||||
        // All other backslashes occur literally
 | 
			
		||||
 | 
			
		||||
        // Quote the whole thing:
 | 
			
		||||
        arg = '"' + arg + '"';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return arg;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = escapeArgument;
 | 
			
		||||
							
								
								
									
										12
									
								
								express-server/node_modules/cross-spawn/lib/util/escapeCommand.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								express-server/node_modules/cross-spawn/lib/util/escapeCommand.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var escapeArgument = require('./escapeArgument');
 | 
			
		||||
 | 
			
		||||
function escapeCommand(command) {
 | 
			
		||||
    // Do not escape if this command is not dangerous..
 | 
			
		||||
    // We do this so that commands like "echo" or "ifconfig" work
 | 
			
		||||
    // Quoting them, will make them unaccessible
 | 
			
		||||
    return /^[a-z0-9_-]+$/i.test(command) ? command : escapeArgument(command, true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = escapeCommand;
 | 
			
		||||
							
								
								
									
										18
									
								
								express-server/node_modules/cross-spawn/lib/util/hasEmptyArgumentBug.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								express-server/node_modules/cross-spawn/lib/util/hasEmptyArgumentBug.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
// See: https://github.com/IndigoUnited/node-cross-spawn/pull/34#issuecomment-221623455
 | 
			
		||||
function hasEmptyArgumentBug() {
 | 
			
		||||
    var nodeVer;
 | 
			
		||||
 | 
			
		||||
    if (process.platform !== 'win32') {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    nodeVer = process.version.substr(1).split('.').map(function (num) {
 | 
			
		||||
        return parseInt(num, 10);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    return (nodeVer[0] === 0 && nodeVer[1] < 12);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = hasEmptyArgumentBug();
 | 
			
		||||
							
								
								
									
										37
									
								
								express-server/node_modules/cross-spawn/lib/util/readShebang.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								express-server/node_modules/cross-spawn/lib/util/readShebang.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var fs = require('fs');
 | 
			
		||||
var LRU = require('lru-cache');
 | 
			
		||||
var shebangCommand = require('shebang-command');
 | 
			
		||||
 | 
			
		||||
var shebangCache = new LRU({ max: 50, maxAge: 30 * 1000 });  // Cache just for 30sec
 | 
			
		||||
 | 
			
		||||
function readShebang(command) {
 | 
			
		||||
    var buffer;
 | 
			
		||||
    var fd;
 | 
			
		||||
    var shebang;
 | 
			
		||||
 | 
			
		||||
    // Check if it is in the cache first
 | 
			
		||||
    if (shebangCache.has(command)) {
 | 
			
		||||
        return shebangCache.get(command);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Read the first 150 bytes from the file
 | 
			
		||||
    buffer = new Buffer(150);
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
        fd = fs.openSync(command, 'r');
 | 
			
		||||
        fs.readSync(fd, buffer, 0, 150, 0);
 | 
			
		||||
        fs.closeSync(fd);
 | 
			
		||||
    } catch (e) { /* empty */ }
 | 
			
		||||
 | 
			
		||||
    // Attempt to extract shebang (null is returned if not a shebang)
 | 
			
		||||
    shebang = shebangCommand(buffer.toString());
 | 
			
		||||
 | 
			
		||||
    // Store the shebang in the cache
 | 
			
		||||
    shebangCache.set(command, shebang);
 | 
			
		||||
 | 
			
		||||
    return shebang;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = readShebang;
 | 
			
		||||
							
								
								
									
										31
									
								
								express-server/node_modules/cross-spawn/lib/util/resolveCommand.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								express-server/node_modules/cross-spawn/lib/util/resolveCommand.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var path = require('path');
 | 
			
		||||
var which = require('which');
 | 
			
		||||
var LRU = require('lru-cache');
 | 
			
		||||
 | 
			
		||||
var commandCache = new LRU({ max: 50, maxAge: 30 * 1000 });  // Cache just for 30sec
 | 
			
		||||
 | 
			
		||||
function resolveCommand(command, noExtension) {
 | 
			
		||||
    var resolved;
 | 
			
		||||
 | 
			
		||||
    noExtension = !!noExtension;
 | 
			
		||||
    resolved = commandCache.get(command + '!' + noExtension);
 | 
			
		||||
 | 
			
		||||
    // Check if its resolved in the cache
 | 
			
		||||
    if (commandCache.has(command)) {
 | 
			
		||||
        return commandCache.get(command);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
        resolved = !noExtension ?
 | 
			
		||||
            which.sync(command) :
 | 
			
		||||
            which.sync(command, { pathExt: path.delimiter + (process.env.PATHEXT || '') });
 | 
			
		||||
    } catch (e) { /* empty */ }
 | 
			
		||||
 | 
			
		||||
    commandCache.set(command + '!' + noExtension, resolved);
 | 
			
		||||
 | 
			
		||||
    return resolved;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = resolveCommand;
 | 
			
		||||
							
								
								
									
										15
									
								
								express-server/node_modules/cross-spawn/node_modules/lru-cache/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								express-server/node_modules/cross-spawn/node_modules/lru-cache/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.
 | 
			
		||||
							
								
								
									
										158
									
								
								express-server/node_modules/cross-spawn/node_modules/lru-cache/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										158
									
								
								express-server/node_modules/cross-spawn/node_modules/lru-cache/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,158 @@
 | 
			
		||||
# lru cache
 | 
			
		||||
 | 
			
		||||
A cache object that deletes the least-recently-used items.
 | 
			
		||||
 | 
			
		||||
[](https://travis-ci.org/isaacs/node-lru-cache) [](https://coveralls.io/github/isaacs/node-lru-cache)
 | 
			
		||||
 | 
			
		||||
## Installation:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
npm install lru-cache --save
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Usage:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var LRU = require("lru-cache")
 | 
			
		||||
  , options = { max: 500
 | 
			
		||||
              , length: function (n, key) { return n * 2 + key.length }
 | 
			
		||||
              , dispose: function (key, n) { n.close() }
 | 
			
		||||
              , maxAge: 1000 * 60 * 60 }
 | 
			
		||||
  , cache = LRU(options)
 | 
			
		||||
  , otherCache = LRU(50) // sets just the max size
 | 
			
		||||
 | 
			
		||||
cache.set("key", "value")
 | 
			
		||||
cache.get("key") // "value"
 | 
			
		||||
 | 
			
		||||
// non-string keys ARE fully supported
 | 
			
		||||
// but note that it must be THE SAME object, not
 | 
			
		||||
// just a JSON-equivalent object.
 | 
			
		||||
var someObject = { a: 1 }
 | 
			
		||||
cache.set(someObject, 'a value')
 | 
			
		||||
// Object keys are not toString()-ed
 | 
			
		||||
cache.set('[object Object]', 'a different value')
 | 
			
		||||
assert.equal(cache.get(someObject), 'a value')
 | 
			
		||||
// A similar object with same keys/values won't work,
 | 
			
		||||
// because it's a different object identity
 | 
			
		||||
assert.equal(cache.get({ a: 1 }), undefined)
 | 
			
		||||
 | 
			
		||||
cache.reset()    // empty the cache
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
If you put more stuff in it, then items will fall out.
 | 
			
		||||
 | 
			
		||||
If you try to put an oversized thing in it, then it'll fall out right
 | 
			
		||||
away.
 | 
			
		||||
 | 
			
		||||
## Options
 | 
			
		||||
 | 
			
		||||
* `max` The maximum size of the cache, checked by applying the length
 | 
			
		||||
  function to all values in the cache.  Not setting this is kind of
 | 
			
		||||
  silly, since that's the whole purpose of this lib, but it defaults
 | 
			
		||||
  to `Infinity`.
 | 
			
		||||
* `maxAge` Maximum age in ms.  Items are not pro-actively pruned out
 | 
			
		||||
  as they age, but if you try to get an item that is too old, it'll
 | 
			
		||||
  drop it and return undefined instead of giving it to you.
 | 
			
		||||
* `length` Function that is used to calculate the length of stored
 | 
			
		||||
  items.  If you're storing strings or buffers, then you probably want
 | 
			
		||||
  to do something like `function(n, key){return n.length}`.  The default is
 | 
			
		||||
  `function(){return 1}`, which is fine if you want to store `max`
 | 
			
		||||
  like-sized things.  The item is passed as the first argument, and
 | 
			
		||||
  the key is passed as the second argumnet.
 | 
			
		||||
* `dispose` Function that is called on items when they are dropped
 | 
			
		||||
  from the cache.  This can be handy if you want to close file
 | 
			
		||||
  descriptors or do other cleanup tasks when items are no longer
 | 
			
		||||
  accessible.  Called with `key, value`.  It's called *before*
 | 
			
		||||
  actually removing the item from the internal cache, so if you want
 | 
			
		||||
  to immediately put it back in, you'll have to do that in a
 | 
			
		||||
  `nextTick` or `setTimeout` callback or it won't do anything.
 | 
			
		||||
* `stale` By default, if you set a `maxAge`, it'll only actually pull
 | 
			
		||||
  stale items out of the cache when you `get(key)`.  (That is, it's
 | 
			
		||||
  not pre-emptively doing a `setTimeout` or anything.)  If you set
 | 
			
		||||
  `stale:true`, it'll return the stale value before deleting it.  If
 | 
			
		||||
  you don't set this, then it'll return `undefined` when you try to
 | 
			
		||||
  get a stale entry, as if it had already been deleted.
 | 
			
		||||
* `noDisposeOnSet` By default, if you set a `dispose()` method, then
 | 
			
		||||
  it'll be called whenever a `set()` operation overwrites an existing
 | 
			
		||||
  key.  If you set this option, `dispose()` will only be called when a
 | 
			
		||||
  key falls out of the cache, not when it is overwritten.
 | 
			
		||||
 | 
			
		||||
## API
 | 
			
		||||
 | 
			
		||||
* `set(key, value, maxAge)`
 | 
			
		||||
* `get(key) => value`
 | 
			
		||||
 | 
			
		||||
    Both of these will update the "recently used"-ness of the key.
 | 
			
		||||
    They do what you think. `maxAge` is optional and overrides the
 | 
			
		||||
    cache `maxAge` option if provided.
 | 
			
		||||
 | 
			
		||||
    If the key is not found, `get()` will return `undefined`.
 | 
			
		||||
 | 
			
		||||
    The key and val can be any value.
 | 
			
		||||
 | 
			
		||||
* `peek(key)`
 | 
			
		||||
 | 
			
		||||
    Returns the key value (or `undefined` if not found) without
 | 
			
		||||
    updating the "recently used"-ness of the key.
 | 
			
		||||
 | 
			
		||||
    (If you find yourself using this a lot, you *might* be using the
 | 
			
		||||
    wrong sort of data structure, but there are some use cases where
 | 
			
		||||
    it's handy.)
 | 
			
		||||
 | 
			
		||||
* `del(key)`
 | 
			
		||||
 | 
			
		||||
    Deletes a key out of the cache.
 | 
			
		||||
 | 
			
		||||
* `reset()`
 | 
			
		||||
 | 
			
		||||
    Clear the cache entirely, throwing away all values.
 | 
			
		||||
 | 
			
		||||
* `has(key)`
 | 
			
		||||
 | 
			
		||||
    Check if a key is in the cache, without updating the recent-ness
 | 
			
		||||
    or deleting it for being stale.
 | 
			
		||||
 | 
			
		||||
* `forEach(function(value,key,cache), [thisp])`
 | 
			
		||||
 | 
			
		||||
    Just like `Array.prototype.forEach`.  Iterates over all the keys
 | 
			
		||||
    in the cache, in order of recent-ness.  (Ie, more recently used
 | 
			
		||||
    items are iterated over first.)
 | 
			
		||||
 | 
			
		||||
* `rforEach(function(value,key,cache), [thisp])`
 | 
			
		||||
 | 
			
		||||
    The same as `cache.forEach(...)` but items are iterated over in
 | 
			
		||||
    reverse order.  (ie, less recently used items are iterated over
 | 
			
		||||
    first.)
 | 
			
		||||
 | 
			
		||||
* `keys()`
 | 
			
		||||
 | 
			
		||||
    Return an array of the keys in the cache.
 | 
			
		||||
 | 
			
		||||
* `values()`
 | 
			
		||||
 | 
			
		||||
    Return an array of the values in the cache.
 | 
			
		||||
 | 
			
		||||
* `length`
 | 
			
		||||
 | 
			
		||||
    Return total length of objects in cache taking into account
 | 
			
		||||
    `length` options function.
 | 
			
		||||
 | 
			
		||||
* `itemCount`
 | 
			
		||||
 | 
			
		||||
    Return total quantity of objects currently in cache. Note, that
 | 
			
		||||
    `stale` (see options) items are returned as part of this item
 | 
			
		||||
    count.
 | 
			
		||||
 | 
			
		||||
* `dump()`
 | 
			
		||||
 | 
			
		||||
    Return an array of the cache entries ready for serialization and usage
 | 
			
		||||
    with 'destinationCache.load(arr)`.
 | 
			
		||||
 | 
			
		||||
* `load(cacheEntriesArray)`
 | 
			
		||||
 | 
			
		||||
    Loads another cache entries array, obtained with `sourceCache.dump()`,
 | 
			
		||||
    into the cache. The destination cache is reset before loading new entries
 | 
			
		||||
 | 
			
		||||
* `prune()`
 | 
			
		||||
 | 
			
		||||
    Manually iterates over the entire cache proactively pruning old entries
 | 
			
		||||
							
								
								
									
										468
									
								
								express-server/node_modules/cross-spawn/node_modules/lru-cache/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										468
									
								
								express-server/node_modules/cross-spawn/node_modules/lru-cache/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,468 @@
 | 
			
		||||
'use strict'
 | 
			
		||||
 | 
			
		||||
module.exports = LRUCache
 | 
			
		||||
 | 
			
		||||
// This will be a proper iterable 'Map' in engines that support it,
 | 
			
		||||
// or a fakey-fake PseudoMap in older versions.
 | 
			
		||||
var Map = require('pseudomap')
 | 
			
		||||
var util = require('util')
 | 
			
		||||
 | 
			
		||||
// A linked list to keep track of recently-used-ness
 | 
			
		||||
var Yallist = require('yallist')
 | 
			
		||||
 | 
			
		||||
// use symbols if possible, otherwise just _props
 | 
			
		||||
var hasSymbol = typeof Symbol === 'function' && process.env._nodeLRUCacheForceNoSymbol !== '1'
 | 
			
		||||
var makeSymbol
 | 
			
		||||
if (hasSymbol) {
 | 
			
		||||
  makeSymbol = function (key) {
 | 
			
		||||
    return Symbol(key)
 | 
			
		||||
  }
 | 
			
		||||
} else {
 | 
			
		||||
  makeSymbol = function (key) {
 | 
			
		||||
    return '_' + key
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var MAX = makeSymbol('max')
 | 
			
		||||
var LENGTH = makeSymbol('length')
 | 
			
		||||
var LENGTH_CALCULATOR = makeSymbol('lengthCalculator')
 | 
			
		||||
var ALLOW_STALE = makeSymbol('allowStale')
 | 
			
		||||
var MAX_AGE = makeSymbol('maxAge')
 | 
			
		||||
var DISPOSE = makeSymbol('dispose')
 | 
			
		||||
var NO_DISPOSE_ON_SET = makeSymbol('noDisposeOnSet')
 | 
			
		||||
var LRU_LIST = makeSymbol('lruList')
 | 
			
		||||
var CACHE = makeSymbol('cache')
 | 
			
		||||
 | 
			
		||||
function naiveLength () { return 1 }
 | 
			
		||||
 | 
			
		||||
// lruList is a yallist where the head is the youngest
 | 
			
		||||
// item, and the tail is the oldest.  the list contains the Hit
 | 
			
		||||
// objects as the entries.
 | 
			
		||||
// Each Hit object has a reference to its Yallist.Node.  This
 | 
			
		||||
// never changes.
 | 
			
		||||
//
 | 
			
		||||
// cache is a Map (or PseudoMap) that matches the keys to
 | 
			
		||||
// the Yallist.Node object.
 | 
			
		||||
function LRUCache (options) {
 | 
			
		||||
  if (!(this instanceof LRUCache)) {
 | 
			
		||||
    return new LRUCache(options)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (typeof options === 'number') {
 | 
			
		||||
    options = { max: options }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!options) {
 | 
			
		||||
    options = {}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var max = this[MAX] = options.max
 | 
			
		||||
  // Kind of weird to have a default max of Infinity, but oh well.
 | 
			
		||||
  if (!max ||
 | 
			
		||||
      !(typeof max === 'number') ||
 | 
			
		||||
      max <= 0) {
 | 
			
		||||
    this[MAX] = Infinity
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var lc = options.length || naiveLength
 | 
			
		||||
  if (typeof lc !== 'function') {
 | 
			
		||||
    lc = naiveLength
 | 
			
		||||
  }
 | 
			
		||||
  this[LENGTH_CALCULATOR] = lc
 | 
			
		||||
 | 
			
		||||
  this[ALLOW_STALE] = options.stale || false
 | 
			
		||||
  this[MAX_AGE] = options.maxAge || 0
 | 
			
		||||
  this[DISPOSE] = options.dispose
 | 
			
		||||
  this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false
 | 
			
		||||
  this.reset()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// resize the cache when the max changes.
 | 
			
		||||
Object.defineProperty(LRUCache.prototype, 'max', {
 | 
			
		||||
  set: function (mL) {
 | 
			
		||||
    if (!mL || !(typeof mL === 'number') || mL <= 0) {
 | 
			
		||||
      mL = Infinity
 | 
			
		||||
    }
 | 
			
		||||
    this[MAX] = mL
 | 
			
		||||
    trim(this)
 | 
			
		||||
  },
 | 
			
		||||
  get: function () {
 | 
			
		||||
    return this[MAX]
 | 
			
		||||
  },
 | 
			
		||||
  enumerable: true
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(LRUCache.prototype, 'allowStale', {
 | 
			
		||||
  set: function (allowStale) {
 | 
			
		||||
    this[ALLOW_STALE] = !!allowStale
 | 
			
		||||
  },
 | 
			
		||||
  get: function () {
 | 
			
		||||
    return this[ALLOW_STALE]
 | 
			
		||||
  },
 | 
			
		||||
  enumerable: true
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(LRUCache.prototype, 'maxAge', {
 | 
			
		||||
  set: function (mA) {
 | 
			
		||||
    if (!mA || !(typeof mA === 'number') || mA < 0) {
 | 
			
		||||
      mA = 0
 | 
			
		||||
    }
 | 
			
		||||
    this[MAX_AGE] = mA
 | 
			
		||||
    trim(this)
 | 
			
		||||
  },
 | 
			
		||||
  get: function () {
 | 
			
		||||
    return this[MAX_AGE]
 | 
			
		||||
  },
 | 
			
		||||
  enumerable: true
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
// resize the cache when the lengthCalculator changes.
 | 
			
		||||
Object.defineProperty(LRUCache.prototype, 'lengthCalculator', {
 | 
			
		||||
  set: function (lC) {
 | 
			
		||||
    if (typeof lC !== 'function') {
 | 
			
		||||
      lC = naiveLength
 | 
			
		||||
    }
 | 
			
		||||
    if (lC !== this[LENGTH_CALCULATOR]) {
 | 
			
		||||
      this[LENGTH_CALCULATOR] = lC
 | 
			
		||||
      this[LENGTH] = 0
 | 
			
		||||
      this[LRU_LIST].forEach(function (hit) {
 | 
			
		||||
        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)
 | 
			
		||||
        this[LENGTH] += hit.length
 | 
			
		||||
      }, this)
 | 
			
		||||
    }
 | 
			
		||||
    trim(this)
 | 
			
		||||
  },
 | 
			
		||||
  get: function () { return this[LENGTH_CALCULATOR] },
 | 
			
		||||
  enumerable: true
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(LRUCache.prototype, 'length', {
 | 
			
		||||
  get: function () { return this[LENGTH] },
 | 
			
		||||
  enumerable: true
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(LRUCache.prototype, 'itemCount', {
 | 
			
		||||
  get: function () { return this[LRU_LIST].length },
 | 
			
		||||
  enumerable: true
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.rforEach = function (fn, thisp) {
 | 
			
		||||
  thisp = thisp || this
 | 
			
		||||
  for (var walker = this[LRU_LIST].tail; walker !== null;) {
 | 
			
		||||
    var prev = walker.prev
 | 
			
		||||
    forEachStep(this, fn, walker, thisp)
 | 
			
		||||
    walker = prev
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function forEachStep (self, fn, node, thisp) {
 | 
			
		||||
  var hit = node.value
 | 
			
		||||
  if (isStale(self, hit)) {
 | 
			
		||||
    del(self, node)
 | 
			
		||||
    if (!self[ALLOW_STALE]) {
 | 
			
		||||
      hit = undefined
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if (hit) {
 | 
			
		||||
    fn.call(thisp, hit.value, hit.key, self)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.forEach = function (fn, thisp) {
 | 
			
		||||
  thisp = thisp || this
 | 
			
		||||
  for (var walker = this[LRU_LIST].head; walker !== null;) {
 | 
			
		||||
    var next = walker.next
 | 
			
		||||
    forEachStep(this, fn, walker, thisp)
 | 
			
		||||
    walker = next
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.keys = function () {
 | 
			
		||||
  return this[LRU_LIST].toArray().map(function (k) {
 | 
			
		||||
    return k.key
 | 
			
		||||
  }, this)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.values = function () {
 | 
			
		||||
  return this[LRU_LIST].toArray().map(function (k) {
 | 
			
		||||
    return k.value
 | 
			
		||||
  }, this)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.reset = function () {
 | 
			
		||||
  if (this[DISPOSE] &&
 | 
			
		||||
      this[LRU_LIST] &&
 | 
			
		||||
      this[LRU_LIST].length) {
 | 
			
		||||
    this[LRU_LIST].forEach(function (hit) {
 | 
			
		||||
      this[DISPOSE](hit.key, hit.value)
 | 
			
		||||
    }, this)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  this[CACHE] = new Map() // hash of items by key
 | 
			
		||||
  this[LRU_LIST] = new Yallist() // list of items in order of use recency
 | 
			
		||||
  this[LENGTH] = 0 // length of items in the list
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.dump = function () {
 | 
			
		||||
  return this[LRU_LIST].map(function (hit) {
 | 
			
		||||
    if (!isStale(this, hit)) {
 | 
			
		||||
      return {
 | 
			
		||||
        k: hit.key,
 | 
			
		||||
        v: hit.value,
 | 
			
		||||
        e: hit.now + (hit.maxAge || 0)
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }, this).toArray().filter(function (h) {
 | 
			
		||||
    return h
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.dumpLru = function () {
 | 
			
		||||
  return this[LRU_LIST]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* istanbul ignore next */
 | 
			
		||||
LRUCache.prototype.inspect = function (n, opts) {
 | 
			
		||||
  var str = 'LRUCache {'
 | 
			
		||||
  var extras = false
 | 
			
		||||
 | 
			
		||||
  var as = this[ALLOW_STALE]
 | 
			
		||||
  if (as) {
 | 
			
		||||
    str += '\n  allowStale: true'
 | 
			
		||||
    extras = true
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var max = this[MAX]
 | 
			
		||||
  if (max && max !== Infinity) {
 | 
			
		||||
    if (extras) {
 | 
			
		||||
      str += ','
 | 
			
		||||
    }
 | 
			
		||||
    str += '\n  max: ' + util.inspect(max, opts)
 | 
			
		||||
    extras = true
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var maxAge = this[MAX_AGE]
 | 
			
		||||
  if (maxAge) {
 | 
			
		||||
    if (extras) {
 | 
			
		||||
      str += ','
 | 
			
		||||
    }
 | 
			
		||||
    str += '\n  maxAge: ' + util.inspect(maxAge, opts)
 | 
			
		||||
    extras = true
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var lc = this[LENGTH_CALCULATOR]
 | 
			
		||||
  if (lc && lc !== naiveLength) {
 | 
			
		||||
    if (extras) {
 | 
			
		||||
      str += ','
 | 
			
		||||
    }
 | 
			
		||||
    str += '\n  length: ' + util.inspect(this[LENGTH], opts)
 | 
			
		||||
    extras = true
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var didFirst = false
 | 
			
		||||
  this[LRU_LIST].forEach(function (item) {
 | 
			
		||||
    if (didFirst) {
 | 
			
		||||
      str += ',\n  '
 | 
			
		||||
    } else {
 | 
			
		||||
      if (extras) {
 | 
			
		||||
        str += ',\n'
 | 
			
		||||
      }
 | 
			
		||||
      didFirst = true
 | 
			
		||||
      str += '\n  '
 | 
			
		||||
    }
 | 
			
		||||
    var key = util.inspect(item.key).split('\n').join('\n  ')
 | 
			
		||||
    var val = { value: item.value }
 | 
			
		||||
    if (item.maxAge !== maxAge) {
 | 
			
		||||
      val.maxAge = item.maxAge
 | 
			
		||||
    }
 | 
			
		||||
    if (lc !== naiveLength) {
 | 
			
		||||
      val.length = item.length
 | 
			
		||||
    }
 | 
			
		||||
    if (isStale(this, item)) {
 | 
			
		||||
      val.stale = true
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    val = util.inspect(val, opts).split('\n').join('\n  ')
 | 
			
		||||
    str += key + ' => ' + val
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  if (didFirst || extras) {
 | 
			
		||||
    str += '\n'
 | 
			
		||||
  }
 | 
			
		||||
  str += '}'
 | 
			
		||||
 | 
			
		||||
  return str
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.set = function (key, value, maxAge) {
 | 
			
		||||
  maxAge = maxAge || this[MAX_AGE]
 | 
			
		||||
 | 
			
		||||
  var now = maxAge ? Date.now() : 0
 | 
			
		||||
  var len = this[LENGTH_CALCULATOR](value, key)
 | 
			
		||||
 | 
			
		||||
  if (this[CACHE].has(key)) {
 | 
			
		||||
    if (len > this[MAX]) {
 | 
			
		||||
      del(this, this[CACHE].get(key))
 | 
			
		||||
      return false
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var node = this[CACHE].get(key)
 | 
			
		||||
    var item = node.value
 | 
			
		||||
 | 
			
		||||
    // dispose of the old one before overwriting
 | 
			
		||||
    // split out into 2 ifs for better coverage tracking
 | 
			
		||||
    if (this[DISPOSE]) {
 | 
			
		||||
      if (!this[NO_DISPOSE_ON_SET]) {
 | 
			
		||||
        this[DISPOSE](key, item.value)
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    item.now = now
 | 
			
		||||
    item.maxAge = maxAge
 | 
			
		||||
    item.value = value
 | 
			
		||||
    this[LENGTH] += len - item.length
 | 
			
		||||
    item.length = len
 | 
			
		||||
    this.get(key)
 | 
			
		||||
    trim(this)
 | 
			
		||||
    return true
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var hit = new Entry(key, value, len, now, maxAge)
 | 
			
		||||
 | 
			
		||||
  // oversized objects fall out of cache automatically.
 | 
			
		||||
  if (hit.length > this[MAX]) {
 | 
			
		||||
    if (this[DISPOSE]) {
 | 
			
		||||
      this[DISPOSE](key, value)
 | 
			
		||||
    }
 | 
			
		||||
    return false
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  this[LENGTH] += hit.length
 | 
			
		||||
  this[LRU_LIST].unshift(hit)
 | 
			
		||||
  this[CACHE].set(key, this[LRU_LIST].head)
 | 
			
		||||
  trim(this)
 | 
			
		||||
  return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.has = function (key) {
 | 
			
		||||
  if (!this[CACHE].has(key)) return false
 | 
			
		||||
  var hit = this[CACHE].get(key).value
 | 
			
		||||
  if (isStale(this, hit)) {
 | 
			
		||||
    return false
 | 
			
		||||
  }
 | 
			
		||||
  return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.get = function (key) {
 | 
			
		||||
  return get(this, key, true)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.peek = function (key) {
 | 
			
		||||
  return get(this, key, false)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.pop = function () {
 | 
			
		||||
  var node = this[LRU_LIST].tail
 | 
			
		||||
  if (!node) return null
 | 
			
		||||
  del(this, node)
 | 
			
		||||
  return node.value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.del = function (key) {
 | 
			
		||||
  del(this, this[CACHE].get(key))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.load = function (arr) {
 | 
			
		||||
  // reset the cache
 | 
			
		||||
  this.reset()
 | 
			
		||||
 | 
			
		||||
  var now = Date.now()
 | 
			
		||||
  // A previous serialized cache has the most recent items first
 | 
			
		||||
  for (var l = arr.length - 1; l >= 0; l--) {
 | 
			
		||||
    var hit = arr[l]
 | 
			
		||||
    var expiresAt = hit.e || 0
 | 
			
		||||
    if (expiresAt === 0) {
 | 
			
		||||
      // the item was created without expiration in a non aged cache
 | 
			
		||||
      this.set(hit.k, hit.v)
 | 
			
		||||
    } else {
 | 
			
		||||
      var maxAge = expiresAt - now
 | 
			
		||||
      // dont add already expired items
 | 
			
		||||
      if (maxAge > 0) {
 | 
			
		||||
        this.set(hit.k, hit.v, maxAge)
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LRUCache.prototype.prune = function () {
 | 
			
		||||
  var self = this
 | 
			
		||||
  this[CACHE].forEach(function (value, key) {
 | 
			
		||||
    get(self, key, false)
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function get (self, key, doUse) {
 | 
			
		||||
  var node = self[CACHE].get(key)
 | 
			
		||||
  if (node) {
 | 
			
		||||
    var hit = node.value
 | 
			
		||||
    if (isStale(self, hit)) {
 | 
			
		||||
      del(self, node)
 | 
			
		||||
      if (!self[ALLOW_STALE]) hit = undefined
 | 
			
		||||
    } else {
 | 
			
		||||
      if (doUse) {
 | 
			
		||||
        self[LRU_LIST].unshiftNode(node)
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    if (hit) hit = hit.value
 | 
			
		||||
  }
 | 
			
		||||
  return hit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function isStale (self, hit) {
 | 
			
		||||
  if (!hit || (!hit.maxAge && !self[MAX_AGE])) {
 | 
			
		||||
    return false
 | 
			
		||||
  }
 | 
			
		||||
  var stale = false
 | 
			
		||||
  var diff = Date.now() - hit.now
 | 
			
		||||
  if (hit.maxAge) {
 | 
			
		||||
    stale = diff > hit.maxAge
 | 
			
		||||
  } else {
 | 
			
		||||
    stale = self[MAX_AGE] && (diff > self[MAX_AGE])
 | 
			
		||||
  }
 | 
			
		||||
  return stale
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function trim (self) {
 | 
			
		||||
  if (self[LENGTH] > self[MAX]) {
 | 
			
		||||
    for (var walker = self[LRU_LIST].tail;
 | 
			
		||||
      self[LENGTH] > self[MAX] && walker !== null;) {
 | 
			
		||||
      // We know that we're about to delete this one, and also
 | 
			
		||||
      // what the next least recently used key will be, so just
 | 
			
		||||
      // go ahead and set it now.
 | 
			
		||||
      var prev = walker.prev
 | 
			
		||||
      del(self, walker)
 | 
			
		||||
      walker = prev
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function del (self, node) {
 | 
			
		||||
  if (node) {
 | 
			
		||||
    var hit = node.value
 | 
			
		||||
    if (self[DISPOSE]) {
 | 
			
		||||
      self[DISPOSE](hit.key, hit.value)
 | 
			
		||||
    }
 | 
			
		||||
    self[LENGTH] -= hit.length
 | 
			
		||||
    self[CACHE].delete(hit.key)
 | 
			
		||||
    self[LRU_LIST].removeNode(node)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// classy, since V8 prefers predictable objects.
 | 
			
		||||
function Entry (key, value, length, now, maxAge) {
 | 
			
		||||
  this.key = key
 | 
			
		||||
  this.value = value
 | 
			
		||||
  this.length = length
 | 
			
		||||
  this.now = now
 | 
			
		||||
  this.maxAge = maxAge || 0
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										71
									
								
								express-server/node_modules/cross-spawn/node_modules/lru-cache/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								express-server/node_modules/cross-spawn/node_modules/lru-cache/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
{
 | 
			
		||||
  "_from": "lru-cache@^4.0.1",
 | 
			
		||||
  "_id": "lru-cache@4.1.5",
 | 
			
		||||
  "_inBundle": false,
 | 
			
		||||
  "_integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
 | 
			
		||||
  "_location": "/cross-spawn/lru-cache",
 | 
			
		||||
  "_phantomChildren": {},
 | 
			
		||||
  "_requested": {
 | 
			
		||||
    "type": "range",
 | 
			
		||||
    "registry": true,
 | 
			
		||||
    "raw": "lru-cache@^4.0.1",
 | 
			
		||||
    "name": "lru-cache",
 | 
			
		||||
    "escapedName": "lru-cache",
 | 
			
		||||
    "rawSpec": "^4.0.1",
 | 
			
		||||
    "saveSpec": null,
 | 
			
		||||
    "fetchSpec": "^4.0.1"
 | 
			
		||||
  },
 | 
			
		||||
  "_requiredBy": [
 | 
			
		||||
    "/cross-spawn"
 | 
			
		||||
  ],
 | 
			
		||||
  "_resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
 | 
			
		||||
  "_shasum": "8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd",
 | 
			
		||||
  "_spec": "lru-cache@^4.0.1",
 | 
			
		||||
  "_where": "D:\\5CHITM\\Diplomarbeit\\SmartShopper\\SmartShopper\\express-server\\node_modules\\cross-spawn",
 | 
			
		||||
  "author": {
 | 
			
		||||
    "name": "Isaac Z. Schlueter",
 | 
			
		||||
    "email": "i@izs.me"
 | 
			
		||||
  },
 | 
			
		||||
  "bugs": {
 | 
			
		||||
    "url": "https://github.com/isaacs/node-lru-cache/issues"
 | 
			
		||||
  },
 | 
			
		||||
  "bundleDependencies": false,
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "pseudomap": "^1.0.2",
 | 
			
		||||
    "yallist": "^2.1.2"
 | 
			
		||||
  },
 | 
			
		||||
  "deprecated": false,
 | 
			
		||||
  "description": "A cache object that deletes the least-recently-used items.",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "benchmark": "^2.1.4",
 | 
			
		||||
    "standard": "^12.0.1",
 | 
			
		||||
    "tap": "^12.1.0"
 | 
			
		||||
  },
 | 
			
		||||
  "files": [
 | 
			
		||||
    "index.js"
 | 
			
		||||
  ],
 | 
			
		||||
  "homepage": "https://github.com/isaacs/node-lru-cache#readme",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "mru",
 | 
			
		||||
    "lru",
 | 
			
		||||
    "cache"
 | 
			
		||||
  ],
 | 
			
		||||
  "license": "ISC",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "name": "lru-cache",
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git://github.com/isaacs/node-lru-cache.git"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "coveragerport": "tap --coverage-report=html",
 | 
			
		||||
    "lintfix": "standard --fix test/*.js index.js",
 | 
			
		||||
    "postpublish": "git push origin --all; git push origin --tags",
 | 
			
		||||
    "posttest": "standard test/*.js index.js",
 | 
			
		||||
    "postversion": "npm publish --tag=legacy",
 | 
			
		||||
    "preversion": "npm test",
 | 
			
		||||
    "snap": "TAP_SNAPSHOT=1 tap test/*.js -J",
 | 
			
		||||
    "test": "tap test/*.js --100 -J"
 | 
			
		||||
  },
 | 
			
		||||
  "version": "4.1.5"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								express-server/node_modules/cross-spawn/node_modules/yallist/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								express-server/node_modules/cross-spawn/node_modules/yallist/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.
 | 
			
		||||
							
								
								
									
										204
									
								
								express-server/node_modules/cross-spawn/node_modules/yallist/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										204
									
								
								express-server/node_modules/cross-spawn/node_modules/yallist/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,204 @@
 | 
			
		||||
# yallist
 | 
			
		||||
 | 
			
		||||
Yet Another Linked List
 | 
			
		||||
 | 
			
		||||
There are many doubly-linked list implementations like it, but this
 | 
			
		||||
one is mine.
 | 
			
		||||
 | 
			
		||||
For when an array would be too big, and a Map can't be iterated in
 | 
			
		||||
reverse order.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[](https://travis-ci.org/isaacs/yallist) [](https://coveralls.io/github/isaacs/yallist)
 | 
			
		||||
 | 
			
		||||
## basic usage
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var yallist = require('yallist')
 | 
			
		||||
var myList = yallist.create([1, 2, 3])
 | 
			
		||||
myList.push('foo')
 | 
			
		||||
myList.unshift('bar')
 | 
			
		||||
// of course pop() and shift() are there, too
 | 
			
		||||
console.log(myList.toArray()) // ['bar', 1, 2, 3, 'foo']
 | 
			
		||||
myList.forEach(function (k) {
 | 
			
		||||
  // walk the list head to tail
 | 
			
		||||
})
 | 
			
		||||
myList.forEachReverse(function (k, index, list) {
 | 
			
		||||
  // walk the list tail to head
 | 
			
		||||
})
 | 
			
		||||
var myDoubledList = myList.map(function (k) {
 | 
			
		||||
  return k + k
 | 
			
		||||
})
 | 
			
		||||
// now myDoubledList contains ['barbar', 2, 4, 6, 'foofoo']
 | 
			
		||||
// mapReverse is also a thing
 | 
			
		||||
var myDoubledListReverse = myList.mapReverse(function (k) {
 | 
			
		||||
  return k + k
 | 
			
		||||
}) // ['foofoo', 6, 4, 2, 'barbar']
 | 
			
		||||
 | 
			
		||||
var reduced = myList.reduce(function (set, entry) {
 | 
			
		||||
  set += entry
 | 
			
		||||
  return set
 | 
			
		||||
}, 'start')
 | 
			
		||||
console.log(reduced) // 'startfoo123bar'
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## api
 | 
			
		||||
 | 
			
		||||
The whole API is considered "public".
 | 
			
		||||
 | 
			
		||||
Functions with the same name as an Array method work more or less the
 | 
			
		||||
same way.
 | 
			
		||||
 | 
			
		||||
There's reverse versions of most things because that's the point.
 | 
			
		||||
 | 
			
		||||
### Yallist
 | 
			
		||||
 | 
			
		||||
Default export, the class that holds and manages a list.
 | 
			
		||||
 | 
			
		||||
Call it with either a forEach-able (like an array) or a set of
 | 
			
		||||
arguments, to initialize the list.
 | 
			
		||||
 | 
			
		||||
The Array-ish methods all act like you'd expect.  No magic length,
 | 
			
		||||
though, so if you change that it won't automatically prune or add
 | 
			
		||||
empty spots.
 | 
			
		||||
 | 
			
		||||
### Yallist.create(..)
 | 
			
		||||
 | 
			
		||||
Alias for Yallist function.  Some people like factories.
 | 
			
		||||
 | 
			
		||||
#### yallist.head
 | 
			
		||||
 | 
			
		||||
The first node in the list
 | 
			
		||||
 | 
			
		||||
#### yallist.tail
 | 
			
		||||
 | 
			
		||||
The last node in the list
 | 
			
		||||
 | 
			
		||||
#### yallist.length
 | 
			
		||||
 | 
			
		||||
The number of nodes in the list.  (Change this at your peril.  It is
 | 
			
		||||
not magic like Array length.)
 | 
			
		||||
 | 
			
		||||
#### yallist.toArray()
 | 
			
		||||
 | 
			
		||||
Convert the list to an array.
 | 
			
		||||
 | 
			
		||||
#### yallist.forEach(fn, [thisp])
 | 
			
		||||
 | 
			
		||||
Call a function on each item in the list.
 | 
			
		||||
 | 
			
		||||
#### yallist.forEachReverse(fn, [thisp])
 | 
			
		||||
 | 
			
		||||
Call a function on each item in the list, in reverse order.
 | 
			
		||||
 | 
			
		||||
#### yallist.get(n)
 | 
			
		||||
 | 
			
		||||
Get the data at position `n` in the list.  If you use this a lot,
 | 
			
		||||
probably better off just using an Array.
 | 
			
		||||
 | 
			
		||||
#### yallist.getReverse(n)
 | 
			
		||||
 | 
			
		||||
Get the data at position `n`, counting from the tail.
 | 
			
		||||
 | 
			
		||||
#### yallist.map(fn, thisp)
 | 
			
		||||
 | 
			
		||||
Create a new Yallist with the result of calling the function on each
 | 
			
		||||
item.
 | 
			
		||||
 | 
			
		||||
#### yallist.mapReverse(fn, thisp)
 | 
			
		||||
 | 
			
		||||
Same as `map`, but in reverse.
 | 
			
		||||
 | 
			
		||||
#### yallist.pop()
 | 
			
		||||
 | 
			
		||||
Get the data from the list tail, and remove the tail from the list.
 | 
			
		||||
 | 
			
		||||
#### yallist.push(item, ...)
 | 
			
		||||
 | 
			
		||||
Insert one or more items to the tail of the list.
 | 
			
		||||
 | 
			
		||||
#### yallist.reduce(fn, initialValue)
 | 
			
		||||
 | 
			
		||||
Like Array.reduce.
 | 
			
		||||
 | 
			
		||||
#### yallist.reduceReverse
 | 
			
		||||
 | 
			
		||||
Like Array.reduce, but in reverse.
 | 
			
		||||
 | 
			
		||||
#### yallist.reverse
 | 
			
		||||
 | 
			
		||||
Reverse the list in place.
 | 
			
		||||
 | 
			
		||||
#### yallist.shift()
 | 
			
		||||
 | 
			
		||||
Get the data from the list head, and remove the head from the list.
 | 
			
		||||
 | 
			
		||||
#### yallist.slice([from], [to])
 | 
			
		||||
 | 
			
		||||
Just like Array.slice, but returns a new Yallist.
 | 
			
		||||
 | 
			
		||||
#### yallist.sliceReverse([from], [to])
 | 
			
		||||
 | 
			
		||||
Just like yallist.slice, but the result is returned in reverse.
 | 
			
		||||
 | 
			
		||||
#### yallist.toArray()
 | 
			
		||||
 | 
			
		||||
Create an array representation of the list.
 | 
			
		||||
 | 
			
		||||
#### yallist.toArrayReverse()
 | 
			
		||||
 | 
			
		||||
Create a reversed array representation of the list.
 | 
			
		||||
 | 
			
		||||
#### yallist.unshift(item, ...)
 | 
			
		||||
 | 
			
		||||
Insert one or more items to the head of the list.
 | 
			
		||||
 | 
			
		||||
#### yallist.unshiftNode(node)
 | 
			
		||||
 | 
			
		||||
Move a Node object to the front of the list.  (That is, pull it out of
 | 
			
		||||
wherever it lives, and make it the new head.)
 | 
			
		||||
 | 
			
		||||
If the node belongs to a different list, then that list will remove it
 | 
			
		||||
first.
 | 
			
		||||
 | 
			
		||||
#### yallist.pushNode(node)
 | 
			
		||||
 | 
			
		||||
Move a Node object to the end of the list.  (That is, pull it out of
 | 
			
		||||
wherever it lives, and make it the new tail.)
 | 
			
		||||
 | 
			
		||||
If the node belongs to a list already, then that list will remove it
 | 
			
		||||
first.
 | 
			
		||||
 | 
			
		||||
#### yallist.removeNode(node)
 | 
			
		||||
 | 
			
		||||
Remove a node from the list, preserving referential integrity of head
 | 
			
		||||
and tail and other nodes.
 | 
			
		||||
 | 
			
		||||
Will throw an error if you try to have a list remove a node that
 | 
			
		||||
doesn't belong to it.
 | 
			
		||||
 | 
			
		||||
### Yallist.Node
 | 
			
		||||
 | 
			
		||||
The class that holds the data and is actually the list.
 | 
			
		||||
 | 
			
		||||
Call with `var n = new Node(value, previousNode, nextNode)`
 | 
			
		||||
 | 
			
		||||
Note that if you do direct operations on Nodes themselves, it's very
 | 
			
		||||
easy to get into weird states where the list is broken.  Be careful :)
 | 
			
		||||
 | 
			
		||||
#### node.next
 | 
			
		||||
 | 
			
		||||
The next node in the list.
 | 
			
		||||
 | 
			
		||||
#### node.prev
 | 
			
		||||
 | 
			
		||||
The previous node in the list.
 | 
			
		||||
 | 
			
		||||
#### node.value
 | 
			
		||||
 | 
			
		||||
The data the node contains.
 | 
			
		||||
 | 
			
		||||
#### node.list
 | 
			
		||||
 | 
			
		||||
The list to which this node belongs.  (Null if it does not belong to
 | 
			
		||||
any list.)
 | 
			
		||||
							
								
								
									
										7
									
								
								express-server/node_modules/cross-spawn/node_modules/yallist/iterator.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								express-server/node_modules/cross-spawn/node_modules/yallist/iterator.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
var Yallist = require('./yallist.js')
 | 
			
		||||
 | 
			
		||||
Yallist.prototype[Symbol.iterator] = function* () {
 | 
			
		||||
  for (let walker = this.head; walker; walker = walker.next) {
 | 
			
		||||
    yield walker.value
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										62
									
								
								express-server/node_modules/cross-spawn/node_modules/yallist/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								express-server/node_modules/cross-spawn/node_modules/yallist/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
{
 | 
			
		||||
  "_from": "yallist@^2.1.2",
 | 
			
		||||
  "_id": "yallist@2.1.2",
 | 
			
		||||
  "_inBundle": false,
 | 
			
		||||
  "_integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
 | 
			
		||||
  "_location": "/cross-spawn/yallist",
 | 
			
		||||
  "_phantomChildren": {},
 | 
			
		||||
  "_requested": {
 | 
			
		||||
    "type": "range",
 | 
			
		||||
    "registry": true,
 | 
			
		||||
    "raw": "yallist@^2.1.2",
 | 
			
		||||
    "name": "yallist",
 | 
			
		||||
    "escapedName": "yallist",
 | 
			
		||||
    "rawSpec": "^2.1.2",
 | 
			
		||||
    "saveSpec": null,
 | 
			
		||||
    "fetchSpec": "^2.1.2"
 | 
			
		||||
  },
 | 
			
		||||
  "_requiredBy": [
 | 
			
		||||
    "/cross-spawn/lru-cache"
 | 
			
		||||
  ],
 | 
			
		||||
  "_resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
 | 
			
		||||
  "_shasum": "1c11f9218f076089a47dd512f93c6699a6a81d52",
 | 
			
		||||
  "_spec": "yallist@^2.1.2",
 | 
			
		||||
  "_where": "D:\\5CHITM\\Diplomarbeit\\SmartShopper\\SmartShopper\\express-server\\node_modules\\cross-spawn\\node_modules\\lru-cache",
 | 
			
		||||
  "author": {
 | 
			
		||||
    "name": "Isaac Z. Schlueter",
 | 
			
		||||
    "email": "i@izs.me",
 | 
			
		||||
    "url": "http://blog.izs.me/"
 | 
			
		||||
  },
 | 
			
		||||
  "bugs": {
 | 
			
		||||
    "url": "https://github.com/isaacs/yallist/issues"
 | 
			
		||||
  },
 | 
			
		||||
  "bundleDependencies": false,
 | 
			
		||||
  "dependencies": {},
 | 
			
		||||
  "deprecated": false,
 | 
			
		||||
  "description": "Yet Another Linked List",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "tap": "^10.3.0"
 | 
			
		||||
  },
 | 
			
		||||
  "directories": {
 | 
			
		||||
    "test": "test"
 | 
			
		||||
  },
 | 
			
		||||
  "files": [
 | 
			
		||||
    "yallist.js",
 | 
			
		||||
    "iterator.js"
 | 
			
		||||
  ],
 | 
			
		||||
  "homepage": "https://github.com/isaacs/yallist#readme",
 | 
			
		||||
  "license": "ISC",
 | 
			
		||||
  "main": "yallist.js",
 | 
			
		||||
  "name": "yallist",
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git+https://github.com/isaacs/yallist.git"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "postpublish": "git push origin --all; git push origin --tags",
 | 
			
		||||
    "postversion": "npm publish",
 | 
			
		||||
    "preversion": "npm test",
 | 
			
		||||
    "test": "tap test/*.js --100"
 | 
			
		||||
  },
 | 
			
		||||
  "version": "2.1.2"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										370
									
								
								express-server/node_modules/cross-spawn/node_modules/yallist/yallist.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										370
									
								
								express-server/node_modules/cross-spawn/node_modules/yallist/yallist.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,370 @@
 | 
			
		||||
module.exports = Yallist
 | 
			
		||||
 | 
			
		||||
Yallist.Node = Node
 | 
			
		||||
Yallist.create = Yallist
 | 
			
		||||
 | 
			
		||||
function Yallist (list) {
 | 
			
		||||
  var self = this
 | 
			
		||||
  if (!(self instanceof Yallist)) {
 | 
			
		||||
    self = new Yallist()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  self.tail = null
 | 
			
		||||
  self.head = null
 | 
			
		||||
  self.length = 0
 | 
			
		||||
 | 
			
		||||
  if (list && typeof list.forEach === 'function') {
 | 
			
		||||
    list.forEach(function (item) {
 | 
			
		||||
      self.push(item)
 | 
			
		||||
    })
 | 
			
		||||
  } else if (arguments.length > 0) {
 | 
			
		||||
    for (var i = 0, l = arguments.length; i < l; i++) {
 | 
			
		||||
      self.push(arguments[i])
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return self
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.removeNode = function (node) {
 | 
			
		||||
  if (node.list !== this) {
 | 
			
		||||
    throw new Error('removing node which does not belong to this list')
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var next = node.next
 | 
			
		||||
  var prev = node.prev
 | 
			
		||||
 | 
			
		||||
  if (next) {
 | 
			
		||||
    next.prev = prev
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (prev) {
 | 
			
		||||
    prev.next = next
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (node === this.head) {
 | 
			
		||||
    this.head = next
 | 
			
		||||
  }
 | 
			
		||||
  if (node === this.tail) {
 | 
			
		||||
    this.tail = prev
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  node.list.length--
 | 
			
		||||
  node.next = null
 | 
			
		||||
  node.prev = null
 | 
			
		||||
  node.list = null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.unshiftNode = function (node) {
 | 
			
		||||
  if (node === this.head) {
 | 
			
		||||
    return
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (node.list) {
 | 
			
		||||
    node.list.removeNode(node)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var head = this.head
 | 
			
		||||
  node.list = this
 | 
			
		||||
  node.next = head
 | 
			
		||||
  if (head) {
 | 
			
		||||
    head.prev = node
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  this.head = node
 | 
			
		||||
  if (!this.tail) {
 | 
			
		||||
    this.tail = node
 | 
			
		||||
  }
 | 
			
		||||
  this.length++
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.pushNode = function (node) {
 | 
			
		||||
  if (node === this.tail) {
 | 
			
		||||
    return
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (node.list) {
 | 
			
		||||
    node.list.removeNode(node)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var tail = this.tail
 | 
			
		||||
  node.list = this
 | 
			
		||||
  node.prev = tail
 | 
			
		||||
  if (tail) {
 | 
			
		||||
    tail.next = node
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  this.tail = node
 | 
			
		||||
  if (!this.head) {
 | 
			
		||||
    this.head = node
 | 
			
		||||
  }
 | 
			
		||||
  this.length++
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.push = function () {
 | 
			
		||||
  for (var i = 0, l = arguments.length; i < l; i++) {
 | 
			
		||||
    push(this, arguments[i])
 | 
			
		||||
  }
 | 
			
		||||
  return this.length
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.unshift = function () {
 | 
			
		||||
  for (var i = 0, l = arguments.length; i < l; i++) {
 | 
			
		||||
    unshift(this, arguments[i])
 | 
			
		||||
  }
 | 
			
		||||
  return this.length
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.pop = function () {
 | 
			
		||||
  if (!this.tail) {
 | 
			
		||||
    return undefined
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var res = this.tail.value
 | 
			
		||||
  this.tail = this.tail.prev
 | 
			
		||||
  if (this.tail) {
 | 
			
		||||
    this.tail.next = null
 | 
			
		||||
  } else {
 | 
			
		||||
    this.head = null
 | 
			
		||||
  }
 | 
			
		||||
  this.length--
 | 
			
		||||
  return res
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.shift = function () {
 | 
			
		||||
  if (!this.head) {
 | 
			
		||||
    return undefined
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var res = this.head.value
 | 
			
		||||
  this.head = this.head.next
 | 
			
		||||
  if (this.head) {
 | 
			
		||||
    this.head.prev = null
 | 
			
		||||
  } else {
 | 
			
		||||
    this.tail = null
 | 
			
		||||
  }
 | 
			
		||||
  this.length--
 | 
			
		||||
  return res
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.forEach = function (fn, thisp) {
 | 
			
		||||
  thisp = thisp || this
 | 
			
		||||
  for (var walker = this.head, i = 0; walker !== null; i++) {
 | 
			
		||||
    fn.call(thisp, walker.value, i, this)
 | 
			
		||||
    walker = walker.next
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.forEachReverse = function (fn, thisp) {
 | 
			
		||||
  thisp = thisp || this
 | 
			
		||||
  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
 | 
			
		||||
    fn.call(thisp, walker.value, i, this)
 | 
			
		||||
    walker = walker.prev
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.get = function (n) {
 | 
			
		||||
  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
 | 
			
		||||
    // abort out of the list early if we hit a cycle
 | 
			
		||||
    walker = walker.next
 | 
			
		||||
  }
 | 
			
		||||
  if (i === n && walker !== null) {
 | 
			
		||||
    return walker.value
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.getReverse = function (n) {
 | 
			
		||||
  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
 | 
			
		||||
    // abort out of the list early if we hit a cycle
 | 
			
		||||
    walker = walker.prev
 | 
			
		||||
  }
 | 
			
		||||
  if (i === n && walker !== null) {
 | 
			
		||||
    return walker.value
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.map = function (fn, thisp) {
 | 
			
		||||
  thisp = thisp || this
 | 
			
		||||
  var res = new Yallist()
 | 
			
		||||
  for (var walker = this.head; walker !== null;) {
 | 
			
		||||
    res.push(fn.call(thisp, walker.value, this))
 | 
			
		||||
    walker = walker.next
 | 
			
		||||
  }
 | 
			
		||||
  return res
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.mapReverse = function (fn, thisp) {
 | 
			
		||||
  thisp = thisp || this
 | 
			
		||||
  var res = new Yallist()
 | 
			
		||||
  for (var walker = this.tail; walker !== null;) {
 | 
			
		||||
    res.push(fn.call(thisp, walker.value, this))
 | 
			
		||||
    walker = walker.prev
 | 
			
		||||
  }
 | 
			
		||||
  return res
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.reduce = function (fn, initial) {
 | 
			
		||||
  var acc
 | 
			
		||||
  var walker = this.head
 | 
			
		||||
  if (arguments.length > 1) {
 | 
			
		||||
    acc = initial
 | 
			
		||||
  } else if (this.head) {
 | 
			
		||||
    walker = this.head.next
 | 
			
		||||
    acc = this.head.value
 | 
			
		||||
  } else {
 | 
			
		||||
    throw new TypeError('Reduce of empty list with no initial value')
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (var i = 0; walker !== null; i++) {
 | 
			
		||||
    acc = fn(acc, walker.value, i)
 | 
			
		||||
    walker = walker.next
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return acc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.reduceReverse = function (fn, initial) {
 | 
			
		||||
  var acc
 | 
			
		||||
  var walker = this.tail
 | 
			
		||||
  if (arguments.length > 1) {
 | 
			
		||||
    acc = initial
 | 
			
		||||
  } else if (this.tail) {
 | 
			
		||||
    walker = this.tail.prev
 | 
			
		||||
    acc = this.tail.value
 | 
			
		||||
  } else {
 | 
			
		||||
    throw new TypeError('Reduce of empty list with no initial value')
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (var i = this.length - 1; walker !== null; i--) {
 | 
			
		||||
    acc = fn(acc, walker.value, i)
 | 
			
		||||
    walker = walker.prev
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return acc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.toArray = function () {
 | 
			
		||||
  var arr = new Array(this.length)
 | 
			
		||||
  for (var i = 0, walker = this.head; walker !== null; i++) {
 | 
			
		||||
    arr[i] = walker.value
 | 
			
		||||
    walker = walker.next
 | 
			
		||||
  }
 | 
			
		||||
  return arr
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.toArrayReverse = function () {
 | 
			
		||||
  var arr = new Array(this.length)
 | 
			
		||||
  for (var i = 0, walker = this.tail; walker !== null; i++) {
 | 
			
		||||
    arr[i] = walker.value
 | 
			
		||||
    walker = walker.prev
 | 
			
		||||
  }
 | 
			
		||||
  return arr
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.slice = function (from, to) {
 | 
			
		||||
  to = to || this.length
 | 
			
		||||
  if (to < 0) {
 | 
			
		||||
    to += this.length
 | 
			
		||||
  }
 | 
			
		||||
  from = from || 0
 | 
			
		||||
  if (from < 0) {
 | 
			
		||||
    from += this.length
 | 
			
		||||
  }
 | 
			
		||||
  var ret = new Yallist()
 | 
			
		||||
  if (to < from || to < 0) {
 | 
			
		||||
    return ret
 | 
			
		||||
  }
 | 
			
		||||
  if (from < 0) {
 | 
			
		||||
    from = 0
 | 
			
		||||
  }
 | 
			
		||||
  if (to > this.length) {
 | 
			
		||||
    to = this.length
 | 
			
		||||
  }
 | 
			
		||||
  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
 | 
			
		||||
    walker = walker.next
 | 
			
		||||
  }
 | 
			
		||||
  for (; walker !== null && i < to; i++, walker = walker.next) {
 | 
			
		||||
    ret.push(walker.value)
 | 
			
		||||
  }
 | 
			
		||||
  return ret
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.sliceReverse = function (from, to) {
 | 
			
		||||
  to = to || this.length
 | 
			
		||||
  if (to < 0) {
 | 
			
		||||
    to += this.length
 | 
			
		||||
  }
 | 
			
		||||
  from = from || 0
 | 
			
		||||
  if (from < 0) {
 | 
			
		||||
    from += this.length
 | 
			
		||||
  }
 | 
			
		||||
  var ret = new Yallist()
 | 
			
		||||
  if (to < from || to < 0) {
 | 
			
		||||
    return ret
 | 
			
		||||
  }
 | 
			
		||||
  if (from < 0) {
 | 
			
		||||
    from = 0
 | 
			
		||||
  }
 | 
			
		||||
  if (to > this.length) {
 | 
			
		||||
    to = this.length
 | 
			
		||||
  }
 | 
			
		||||
  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
 | 
			
		||||
    walker = walker.prev
 | 
			
		||||
  }
 | 
			
		||||
  for (; walker !== null && i > from; i--, walker = walker.prev) {
 | 
			
		||||
    ret.push(walker.value)
 | 
			
		||||
  }
 | 
			
		||||
  return ret
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Yallist.prototype.reverse = function () {
 | 
			
		||||
  var head = this.head
 | 
			
		||||
  var tail = this.tail
 | 
			
		||||
  for (var walker = head; walker !== null; walker = walker.prev) {
 | 
			
		||||
    var p = walker.prev
 | 
			
		||||
    walker.prev = walker.next
 | 
			
		||||
    walker.next = p
 | 
			
		||||
  }
 | 
			
		||||
  this.head = tail
 | 
			
		||||
  this.tail = head
 | 
			
		||||
  return this
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function push (self, item) {
 | 
			
		||||
  self.tail = new Node(item, self.tail, null, self)
 | 
			
		||||
  if (!self.head) {
 | 
			
		||||
    self.head = self.tail
 | 
			
		||||
  }
 | 
			
		||||
  self.length++
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function unshift (self, item) {
 | 
			
		||||
  self.head = new Node(item, null, self.head, self)
 | 
			
		||||
  if (!self.tail) {
 | 
			
		||||
    self.tail = self.head
 | 
			
		||||
  }
 | 
			
		||||
  self.length++
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function Node (value, prev, next, list) {
 | 
			
		||||
  if (!(this instanceof Node)) {
 | 
			
		||||
    return new Node(value, prev, next, list)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  this.list = list
 | 
			
		||||
  this.value = value
 | 
			
		||||
 | 
			
		||||
  if (prev) {
 | 
			
		||||
    prev.next = this
 | 
			
		||||
    this.prev = prev
 | 
			
		||||
  } else {
 | 
			
		||||
    this.prev = null
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (next) {
 | 
			
		||||
    next.prev = this
 | 
			
		||||
    this.next = next
 | 
			
		||||
  } else {
 | 
			
		||||
    this.next = null
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										85
									
								
								express-server/node_modules/cross-spawn/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								express-server/node_modules/cross-spawn/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
{
 | 
			
		||||
  "_from": "cross-spawn@^5.0.1",
 | 
			
		||||
  "_id": "cross-spawn@5.1.0",
 | 
			
		||||
  "_inBundle": false,
 | 
			
		||||
  "_integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
 | 
			
		||||
  "_location": "/cross-spawn",
 | 
			
		||||
  "_phantomChildren": {
 | 
			
		||||
    "pseudomap": "1.0.2"
 | 
			
		||||
  },
 | 
			
		||||
  "_requested": {
 | 
			
		||||
    "type": "range",
 | 
			
		||||
    "registry": true,
 | 
			
		||||
    "raw": "cross-spawn@^5.0.1",
 | 
			
		||||
    "name": "cross-spawn",
 | 
			
		||||
    "escapedName": "cross-spawn",
 | 
			
		||||
    "rawSpec": "^5.0.1",
 | 
			
		||||
    "saveSpec": null,
 | 
			
		||||
    "fetchSpec": "^5.0.1"
 | 
			
		||||
  },
 | 
			
		||||
  "_requiredBy": [
 | 
			
		||||
    "/execa"
 | 
			
		||||
  ],
 | 
			
		||||
  "_resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
 | 
			
		||||
  "_shasum": "e8bd0efee58fcff6f8f94510a0a554bbfa235449",
 | 
			
		||||
  "_spec": "cross-spawn@^5.0.1",
 | 
			
		||||
  "_where": "D:\\5CHITM\\Diplomarbeit\\SmartShopper\\SmartShopper\\express-server\\node_modules\\execa",
 | 
			
		||||
  "author": {
 | 
			
		||||
    "name": "IndigoUnited",
 | 
			
		||||
    "email": "hello@indigounited.com",
 | 
			
		||||
    "url": "http://indigounited.com"
 | 
			
		||||
  },
 | 
			
		||||
  "bugs": {
 | 
			
		||||
    "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/"
 | 
			
		||||
  },
 | 
			
		||||
  "bundleDependencies": false,
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "lru-cache": "^4.0.1",
 | 
			
		||||
    "shebang-command": "^1.2.0",
 | 
			
		||||
    "which": "^1.2.9"
 | 
			
		||||
  },
 | 
			
		||||
  "deprecated": false,
 | 
			
		||||
  "description": "Cross platform child_process#spawn and child_process#spawnSync",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@satazor/eslint-config": "^3.0.0",
 | 
			
		||||
    "eslint": "^3.0.0",
 | 
			
		||||
    "expect.js": "^0.3.0",
 | 
			
		||||
    "glob": "^7.0.0",
 | 
			
		||||
    "mkdirp": "^0.5.1",
 | 
			
		||||
    "mocha": "^3.0.2",
 | 
			
		||||
    "once": "^1.4.0",
 | 
			
		||||
    "rimraf": "^2.5.0"
 | 
			
		||||
  },
 | 
			
		||||
  "files": [
 | 
			
		||||
    "index.js",
 | 
			
		||||
    "lib"
 | 
			
		||||
  ],
 | 
			
		||||
  "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "spawn",
 | 
			
		||||
    "spawnSync",
 | 
			
		||||
    "windows",
 | 
			
		||||
    "cross",
 | 
			
		||||
    "platform",
 | 
			
		||||
    "path",
 | 
			
		||||
    "ext",
 | 
			
		||||
    "path-ext",
 | 
			
		||||
    "path_ext",
 | 
			
		||||
    "shebang",
 | 
			
		||||
    "hashbang",
 | 
			
		||||
    "cmd",
 | 
			
		||||
    "execute"
 | 
			
		||||
  ],
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "name": "cross-spawn",
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git://github.com/IndigoUnited/node-cross-spawn.git"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "lint": "eslint '{*.js,lib/**/*.js,test/**/*.js}'",
 | 
			
		||||
    "test": "node test/prepare && mocha --bail test/test"
 | 
			
		||||
  },
 | 
			
		||||
  "version": "5.1.0"
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user