mirror of
				https://gitea.com/actions/setup-python.git
				synced 2025-11-04 07:47:09 +00:00 
			
		
		
		
	Use ncc instead of saving node_modules
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,4 @@
 | 
			
		||||
# Explicitly not ignoring node_modules so that they are included in package downloaded by runner
 | 
			
		||||
!node_modules/
 | 
			
		||||
# Ignore node_modules, ncc is used to compile nodejs modules into a single file in the releases branch
 | 
			
		||||
__tests__/runner/*
 | 
			
		||||
 | 
			
		||||
# Rest of the file pulled from https://github.com/github/gitignore/blob/master/Node.gitignore
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4805
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4805
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,159 +0,0 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | 
			
		||||
    return new (P || (P = Promise))(function (resolve, reject) {
 | 
			
		||||
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
 | 
			
		||||
        step((generator = generator.apply(thisArg, _arguments || [])).next());
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
var __importStar = (this && this.__importStar) || function (mod) {
 | 
			
		||||
    if (mod && mod.__esModule) return mod;
 | 
			
		||||
    var result = {};
 | 
			
		||||
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
 | 
			
		||||
    result["default"] = mod;
 | 
			
		||||
    return result;
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
const os = __importStar(require("os"));
 | 
			
		||||
const path = __importStar(require("path"));
 | 
			
		||||
const semver = __importStar(require("semver"));
 | 
			
		||||
let cacheDirectory = process.env['RUNNER_TOOLSDIRECTORY'] || '';
 | 
			
		||||
if (!cacheDirectory) {
 | 
			
		||||
    let baseLocation;
 | 
			
		||||
    if (process.platform === 'win32') {
 | 
			
		||||
        // On windows use the USERPROFILE env variable
 | 
			
		||||
        baseLocation = process.env['USERPROFILE'] || 'C:\\';
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        if (process.platform === 'darwin') {
 | 
			
		||||
            baseLocation = '/Users';
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            baseLocation = '/home';
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    cacheDirectory = path.join(baseLocation, 'actions', 'cache');
 | 
			
		||||
}
 | 
			
		||||
const core = __importStar(require("@actions/core"));
 | 
			
		||||
const tc = __importStar(require("@actions/tool-cache"));
 | 
			
		||||
const IS_WINDOWS = process.platform === 'win32';
 | 
			
		||||
// Python has "scripts" or "bin" directories where command-line tools that come with packages are installed.
 | 
			
		||||
// This is where pip is, along with anything that pip installs.
 | 
			
		||||
// There is a seperate directory for `pip install --user`.
 | 
			
		||||
//
 | 
			
		||||
// For reference, these directories are as follows:
 | 
			
		||||
//   macOS / Linux:
 | 
			
		||||
//      <sys.prefix>/bin (by default /usr/local/bin, but not on hosted agents -- see the `else`)
 | 
			
		||||
//      (--user) ~/.local/bin
 | 
			
		||||
//   Windows:
 | 
			
		||||
//      <Python installation dir>\Scripts
 | 
			
		||||
//      (--user) %APPDATA%\Python\PythonXY\Scripts
 | 
			
		||||
// See https://docs.python.org/3/library/sysconfig.html
 | 
			
		||||
function binDir(installDir) {
 | 
			
		||||
    if (IS_WINDOWS) {
 | 
			
		||||
        return path.join(installDir, 'Scripts');
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        return path.join(installDir, 'bin');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
// Note on the tool cache layout for PyPy:
 | 
			
		||||
// PyPy has its own versioning scheme that doesn't follow the Python versioning scheme.
 | 
			
		||||
// A particular version of PyPy may contain one or more versions of the Python interpreter.
 | 
			
		||||
// For example, PyPy 7.0 contains Python 2.7, 3.5, and 3.6-alpha.
 | 
			
		||||
// We only care about the Python version, so we don't use the PyPy version for the tool cache.
 | 
			
		||||
function usePyPy(majorVersion, architecture) {
 | 
			
		||||
    const findPyPy = tc.find.bind(undefined, 'PyPy', majorVersion.toString());
 | 
			
		||||
    let installDir = findPyPy(architecture);
 | 
			
		||||
    if (!installDir && IS_WINDOWS) {
 | 
			
		||||
        // PyPy only precompiles binaries for x86, but the architecture parameter defaults to x64.
 | 
			
		||||
        // On Hosted VS2017, we only install an x86 version.
 | 
			
		||||
        // Fall back to x86.
 | 
			
		||||
        installDir = findPyPy('x86');
 | 
			
		||||
    }
 | 
			
		||||
    if (!installDir) {
 | 
			
		||||
        // PyPy not installed in $(Agent.ToolsDirectory)
 | 
			
		||||
        throw new Error(`PyPy ${majorVersion} not found`);
 | 
			
		||||
    }
 | 
			
		||||
    // For PyPy, Windows uses 'bin', not 'Scripts'.
 | 
			
		||||
    const _binDir = path.join(installDir, 'bin');
 | 
			
		||||
    // On Linux and macOS, the Python interpreter is in 'bin'.
 | 
			
		||||
    // On Windows, it is in the installation root.
 | 
			
		||||
    const pythonLocation = IS_WINDOWS ? installDir : _binDir;
 | 
			
		||||
    core.exportVariable('pythonLocation', pythonLocation);
 | 
			
		||||
    core.addPath(installDir);
 | 
			
		||||
    core.addPath(_binDir);
 | 
			
		||||
}
 | 
			
		||||
function useCpythonVersion(version, architecture) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        const desugaredVersionSpec = desugarDevVersion(version);
 | 
			
		||||
        const semanticVersionSpec = pythonVersionToSemantic(desugaredVersionSpec);
 | 
			
		||||
        core.debug(`Semantic version spec of ${version} is ${semanticVersionSpec}`);
 | 
			
		||||
        const installDir = tc.find('Python', semanticVersionSpec, architecture);
 | 
			
		||||
        if (!installDir) {
 | 
			
		||||
            // Fail and list available versions
 | 
			
		||||
            const x86Versions = tc
 | 
			
		||||
                .findAllVersions('Python', 'x86')
 | 
			
		||||
                .map(s => `${s} (x86)`)
 | 
			
		||||
                .join(os.EOL);
 | 
			
		||||
            const x64Versions = tc
 | 
			
		||||
                .findAllVersions('Python', 'x64')
 | 
			
		||||
                .map(s => `${s} (x64)`)
 | 
			
		||||
                .join(os.EOL);
 | 
			
		||||
            throw new Error([
 | 
			
		||||
                `Version ${version} with arch ${architecture} not found`,
 | 
			
		||||
                'Available versions:',
 | 
			
		||||
                x86Versions,
 | 
			
		||||
                x64Versions
 | 
			
		||||
            ].join(os.EOL));
 | 
			
		||||
        }
 | 
			
		||||
        core.exportVariable('pythonLocation', installDir);
 | 
			
		||||
        core.addPath(installDir);
 | 
			
		||||
        core.addPath(binDir(installDir));
 | 
			
		||||
        if (IS_WINDOWS) {
 | 
			
		||||
            // Add --user directory
 | 
			
		||||
            // `installDir` from tool cache should look like $AGENT_TOOLSDIRECTORY/Python/<semantic version>/x64/
 | 
			
		||||
            // So if `findLocalTool` succeeded above, we must have a conformant `installDir`
 | 
			
		||||
            const version = path.basename(path.dirname(installDir));
 | 
			
		||||
            const major = semver.major(version);
 | 
			
		||||
            const minor = semver.minor(version);
 | 
			
		||||
            const userScriptsDir = path.join(process.env['APPDATA'] || '', 'Python', `Python${major}${minor}`, 'Scripts');
 | 
			
		||||
            core.addPath(userScriptsDir);
 | 
			
		||||
        }
 | 
			
		||||
        // On Linux and macOS, pip will create the --user directory and add it to PATH as needed.
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
/** Convert versions like `3.8-dev` to a version like `>= 3.8.0-a0`. */
 | 
			
		||||
function desugarDevVersion(versionSpec) {
 | 
			
		||||
    if (versionSpec.endsWith('-dev')) {
 | 
			
		||||
        const versionRoot = versionSpec.slice(0, -'-dev'.length);
 | 
			
		||||
        return `>= ${versionRoot}.0-a0`;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        return versionSpec;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * Python's prelease versions look like `3.7.0b2`.
 | 
			
		||||
 * This is the one part of Python versioning that does not look like semantic versioning, which specifies `3.7.0-b2`.
 | 
			
		||||
 * If the version spec contains prerelease versions, we need to convert them to the semantic version equivalent.
 | 
			
		||||
 */
 | 
			
		||||
function pythonVersionToSemantic(versionSpec) {
 | 
			
		||||
    const prereleaseVersion = /(\d+\.\d+\.\d+)((?:a|b|rc)\d*)/g;
 | 
			
		||||
    return versionSpec.replace(prereleaseVersion, '$1-$2');
 | 
			
		||||
}
 | 
			
		||||
exports.pythonVersionToSemantic = pythonVersionToSemantic;
 | 
			
		||||
function findPythonVersion(version, architecture) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        switch (version.toUpperCase()) {
 | 
			
		||||
            case 'PYPY2':
 | 
			
		||||
                return usePyPy(2, architecture);
 | 
			
		||||
            case 'PYPY3':
 | 
			
		||||
                return usePyPy(3, architecture);
 | 
			
		||||
            default:
 | 
			
		||||
                return yield useCpythonVersion(version, architecture);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.findPythonVersion = findPythonVersion;
 | 
			
		||||
@@ -1,37 +0,0 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | 
			
		||||
    return new (P || (P = Promise))(function (resolve, reject) {
 | 
			
		||||
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
 | 
			
		||||
        step((generator = generator.apply(thisArg, _arguments || [])).next());
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
var __importStar = (this && this.__importStar) || function (mod) {
 | 
			
		||||
    if (mod && mod.__esModule) return mod;
 | 
			
		||||
    var result = {};
 | 
			
		||||
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
 | 
			
		||||
    result["default"] = mod;
 | 
			
		||||
    return result;
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
const core = __importStar(require("@actions/core"));
 | 
			
		||||
const finder = __importStar(require("./find-python"));
 | 
			
		||||
const path = __importStar(require("path"));
 | 
			
		||||
function run() {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        try {
 | 
			
		||||
            let version = core.getInput('python-version');
 | 
			
		||||
            if (version) {
 | 
			
		||||
                const arch = core.getInput('architecture', { required: true });
 | 
			
		||||
                yield finder.findPythonVersion(version, arch);
 | 
			
		||||
            }
 | 
			
		||||
            const matchersPath = path.join(__dirname, '..', '.github');
 | 
			
		||||
            console.log(`##[add-matcher]${path.join(matchersPath, 'python.json')}`);
 | 
			
		||||
        }
 | 
			
		||||
        catch (err) {
 | 
			
		||||
            core.setFailed(err.message);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
run();
 | 
			
		||||
							
								
								
									
										15
									
								
								node_modules/.bin/semver
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								node_modules/.bin/semver
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,15 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
 | 
			
		||||
 | 
			
		||||
case `uname` in
 | 
			
		||||
    *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
if [ -x "$basedir/node" ]; then
 | 
			
		||||
  "$basedir/node"  "$basedir/../semver/bin/semver.js" "$@"
 | 
			
		||||
  ret=$?
 | 
			
		||||
else 
 | 
			
		||||
  node  "$basedir/../semver/bin/semver.js" "$@"
 | 
			
		||||
  ret=$?
 | 
			
		||||
fi
 | 
			
		||||
exit $ret
 | 
			
		||||
							
								
								
									
										7
									
								
								node_modules/.bin/semver.cmd
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								node_modules/.bin/semver.cmd
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,7 +0,0 @@
 | 
			
		||||
@IF EXIST "%~dp0\node.exe" (
 | 
			
		||||
  "%~dp0\node.exe"  "%~dp0\..\semver\bin\semver.js" %*
 | 
			
		||||
) ELSE (
 | 
			
		||||
  @SETLOCAL
 | 
			
		||||
  @SET PATHEXT=%PATHEXT:;.JS;=;%
 | 
			
		||||
  node  "%~dp0\..\semver\bin\semver.js" %*
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										15
									
								
								node_modules/.bin/uuid
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								node_modules/.bin/uuid
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,15 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
 | 
			
		||||
 | 
			
		||||
case `uname` in
 | 
			
		||||
    *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
if [ -x "$basedir/node" ]; then
 | 
			
		||||
  "$basedir/node"  "$basedir/../uuid/bin/uuid" "$@"
 | 
			
		||||
  ret=$?
 | 
			
		||||
else 
 | 
			
		||||
  node  "$basedir/../uuid/bin/uuid" "$@"
 | 
			
		||||
  ret=$?
 | 
			
		||||
fi
 | 
			
		||||
exit $ret
 | 
			
		||||
							
								
								
									
										7
									
								
								node_modules/.bin/uuid.cmd
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								node_modules/.bin/uuid.cmd
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,7 +0,0 @@
 | 
			
		||||
@IF EXIST "%~dp0\node.exe" (
 | 
			
		||||
  "%~dp0\node.exe"  "%~dp0\..\uuid\bin\uuid" %*
 | 
			
		||||
) ELSE (
 | 
			
		||||
  @SETLOCAL
 | 
			
		||||
  @SET PATHEXT=%PATHEXT:;.JS;=;%
 | 
			
		||||
  node  "%~dp0\..\uuid\bin\uuid" %*
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										81
									
								
								node_modules/@actions/core/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										81
									
								
								node_modules/@actions/core/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,81 +0,0 @@
 | 
			
		||||
# `@actions/core`
 | 
			
		||||
 | 
			
		||||
> Core functions for setting results, logging, registering secrets and exporting variables across actions
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
#### Inputs/Outputs
 | 
			
		||||
 | 
			
		||||
You can use this library to get inputs or set outputs:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const core = require('@actions/core');
 | 
			
		||||
 | 
			
		||||
const myInput = core.getInput('inputName', { required: true });
 | 
			
		||||
 | 
			
		||||
// Do stuff
 | 
			
		||||
 | 
			
		||||
core.setOutput('outputKey', 'outputVal');
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Exporting variables/secrets
 | 
			
		||||
 | 
			
		||||
You can also export variables and secrets for future steps. Variables get set in the environment automatically, while secrets must be scoped into the environment from a workflow using `{{ secret.FOO }}`. Secrets will also be masked from the logs:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const core = require('@actions/core');
 | 
			
		||||
 | 
			
		||||
// Do stuff
 | 
			
		||||
 | 
			
		||||
core.exportVariable('envVar', 'Val');
 | 
			
		||||
core.exportSecret('secretVar', variableWithSecretValue);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### PATH Manipulation
 | 
			
		||||
 | 
			
		||||
You can explicitly add items to the path for all remaining steps in a workflow:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const core = require('@actions/core');
 | 
			
		||||
 | 
			
		||||
core.addPath('pathToTool');
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Exit codes
 | 
			
		||||
 | 
			
		||||
You should use this library to set the failing exit code for your action:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const core = require('@actions/core');
 | 
			
		||||
 | 
			
		||||
try {
 | 
			
		||||
  // Do stuff
 | 
			
		||||
}
 | 
			
		||||
catch (err) {
 | 
			
		||||
  // setFailed logs the message and sets a failing exit code
 | 
			
		||||
  core.setFailed(`Action failed with error ${err}`);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Logging
 | 
			
		||||
 | 
			
		||||
Finally, this library provides some utilities for logging:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const core = require('@actions/core');
 | 
			
		||||
 | 
			
		||||
const myInput = core.getInput('input');
 | 
			
		||||
try {
 | 
			
		||||
  core.debug('Inside try block');
 | 
			
		||||
  
 | 
			
		||||
  if (!myInput) {
 | 
			
		||||
    core.warning('myInput wasnt set');
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  // Do stuff
 | 
			
		||||
}
 | 
			
		||||
catch (err) {
 | 
			
		||||
  core.error('Error ${err}, action may still succeed though');
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										16
									
								
								node_modules/@actions/core/lib/command.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								node_modules/@actions/core/lib/command.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,16 +0,0 @@
 | 
			
		||||
interface CommandProperties {
 | 
			
		||||
    [key: string]: string;
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * Commands
 | 
			
		||||
 *
 | 
			
		||||
 * Command Format:
 | 
			
		||||
 *   ##[name key=value;key=value]message
 | 
			
		||||
 *
 | 
			
		||||
 * Examples:
 | 
			
		||||
 *   ##[warning]This is the user warning message
 | 
			
		||||
 *   ##[set-secret name=mypassword]definatelyNotAPassword!
 | 
			
		||||
 */
 | 
			
		||||
export declare function issueCommand(command: string, properties: CommandProperties, message: string): void;
 | 
			
		||||
export declare function issue(name: string, message: string): void;
 | 
			
		||||
export {};
 | 
			
		||||
							
								
								
									
										66
									
								
								node_modules/@actions/core/lib/command.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										66
									
								
								node_modules/@actions/core/lib/command.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,66 +0,0 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
const os = require("os");
 | 
			
		||||
/**
 | 
			
		||||
 * Commands
 | 
			
		||||
 *
 | 
			
		||||
 * Command Format:
 | 
			
		||||
 *   ##[name key=value;key=value]message
 | 
			
		||||
 *
 | 
			
		||||
 * Examples:
 | 
			
		||||
 *   ##[warning]This is the user warning message
 | 
			
		||||
 *   ##[set-secret name=mypassword]definatelyNotAPassword!
 | 
			
		||||
 */
 | 
			
		||||
function issueCommand(command, properties, message) {
 | 
			
		||||
    const cmd = new Command(command, properties, message);
 | 
			
		||||
    process.stdout.write(cmd.toString() + os.EOL);
 | 
			
		||||
}
 | 
			
		||||
exports.issueCommand = issueCommand;
 | 
			
		||||
function issue(name, message) {
 | 
			
		||||
    issueCommand(name, {}, message);
 | 
			
		||||
}
 | 
			
		||||
exports.issue = issue;
 | 
			
		||||
const CMD_PREFIX = '##[';
 | 
			
		||||
class Command {
 | 
			
		||||
    constructor(command, properties, message) {
 | 
			
		||||
        if (!command) {
 | 
			
		||||
            command = 'missing.command';
 | 
			
		||||
        }
 | 
			
		||||
        this.command = command;
 | 
			
		||||
        this.properties = properties;
 | 
			
		||||
        this.message = message;
 | 
			
		||||
    }
 | 
			
		||||
    toString() {
 | 
			
		||||
        let cmdStr = CMD_PREFIX + this.command;
 | 
			
		||||
        if (this.properties && Object.keys(this.properties).length > 0) {
 | 
			
		||||
            cmdStr += ' ';
 | 
			
		||||
            for (const key in this.properties) {
 | 
			
		||||
                if (this.properties.hasOwnProperty(key)) {
 | 
			
		||||
                    const val = this.properties[key];
 | 
			
		||||
                    if (val) {
 | 
			
		||||
                        // safely append the val - avoid blowing up when attempting to
 | 
			
		||||
                        // call .replace() if message is not a string for some reason
 | 
			
		||||
                        cmdStr += `${key}=${escape(`${val || ''}`)};`;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        cmdStr += ']';
 | 
			
		||||
        // safely append the message - avoid blowing up when attempting to
 | 
			
		||||
        // call .replace() if message is not a string for some reason
 | 
			
		||||
        const message = `${this.message || ''}`;
 | 
			
		||||
        cmdStr += escapeData(message);
 | 
			
		||||
        return cmdStr;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
function escapeData(s) {
 | 
			
		||||
    return s.replace(/\r/g, '%0D').replace(/\n/g, '%0A');
 | 
			
		||||
}
 | 
			
		||||
function escape(s) {
 | 
			
		||||
    return s
 | 
			
		||||
        .replace(/\r/g, '%0D')
 | 
			
		||||
        .replace(/\n/g, '%0A')
 | 
			
		||||
        .replace(/]/g, '%5D')
 | 
			
		||||
        .replace(/;/g, '%3B');
 | 
			
		||||
}
 | 
			
		||||
//# sourceMappingURL=command.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/@actions/core/lib/command.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/@actions/core/lib/command.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":";;AAAA,yBAAwB;AAQxB;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,OAAe,EACf,UAA6B,EAC7B,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC;AAPD,oCAOC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,OAAe;IACjD,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAFD,sBAEC;AAED,MAAM,UAAU,GAAG,KAAK,CAAA;AAExB,MAAM,OAAO;IAKX,YAAY,OAAe,EAAE,UAA6B,EAAE,OAAe;QACzE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,iBAAiB,CAAA;SAC5B;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,IAAI,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;QAEtC,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,MAAM,IAAI,GAAG,CAAA;YACb,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAChC,IAAI,GAAG,EAAE;wBACP,8DAA8D;wBAC9D,6DAA6D;wBAC7D,MAAM,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAA;qBAC9C;iBACF;aACF;SACF;QAED,MAAM,IAAI,GAAG,CAAA;QAEb,kEAAkE;QAClE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;QACvC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;QAE7B,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACtD,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,CAAC;SACL,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACzB,CAAC"}
 | 
			
		||||
							
								
								
									
										73
									
								
								node_modules/@actions/core/lib/core.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										73
									
								
								node_modules/@actions/core/lib/core.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,73 +0,0 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Interface for getInput options
 | 
			
		||||
 */
 | 
			
		||||
export interface InputOptions {
 | 
			
		||||
    /** Optional. Whether the input is required. If required and not present, will throw. Defaults to false */
 | 
			
		||||
    required?: boolean;
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * The code to exit an action
 | 
			
		||||
 */
 | 
			
		||||
export declare enum ExitCode {
 | 
			
		||||
    /**
 | 
			
		||||
     * A code indicating that the action was successful
 | 
			
		||||
     */
 | 
			
		||||
    Success = 0,
 | 
			
		||||
    /**
 | 
			
		||||
     * A code indicating that the action was a failure
 | 
			
		||||
     */
 | 
			
		||||
    Failure = 1
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * sets env variable for this action and future actions in the job
 | 
			
		||||
 * @param name the name of the variable to set
 | 
			
		||||
 * @param val the value of the variable
 | 
			
		||||
 */
 | 
			
		||||
export declare function exportVariable(name: string, val: string): void;
 | 
			
		||||
/**
 | 
			
		||||
 * exports the variable and registers a secret which will get masked from logs
 | 
			
		||||
 * @param name the name of the variable to set
 | 
			
		||||
 * @param val value of the secret
 | 
			
		||||
 */
 | 
			
		||||
export declare function exportSecret(name: string, val: string): void;
 | 
			
		||||
/**
 | 
			
		||||
 * Prepends inputPath to the PATH (for this action and future actions)
 | 
			
		||||
 * @param inputPath
 | 
			
		||||
 */
 | 
			
		||||
export declare function addPath(inputPath: string): void;
 | 
			
		||||
/**
 | 
			
		||||
 * Gets the value of an input.  The value is also trimmed.
 | 
			
		||||
 *
 | 
			
		||||
 * @param     name     name of the input to get
 | 
			
		||||
 * @param     options  optional. See InputOptions.
 | 
			
		||||
 * @returns   string
 | 
			
		||||
 */
 | 
			
		||||
export declare function getInput(name: string, options?: InputOptions): string;
 | 
			
		||||
/**
 | 
			
		||||
 * Sets the value of an output.
 | 
			
		||||
 *
 | 
			
		||||
 * @param     name     name of the output to set
 | 
			
		||||
 * @param     value    value to store
 | 
			
		||||
 */
 | 
			
		||||
export declare function setOutput(name: string, value: string): void;
 | 
			
		||||
/**
 | 
			
		||||
 * Sets the action status to failed.
 | 
			
		||||
 * When the action exits it will be with an exit code of 1
 | 
			
		||||
 * @param message add error issue message
 | 
			
		||||
 */
 | 
			
		||||
export declare function setFailed(message: string): void;
 | 
			
		||||
/**
 | 
			
		||||
 * Writes debug message to user log
 | 
			
		||||
 * @param message debug message
 | 
			
		||||
 */
 | 
			
		||||
export declare function debug(message: string): void;
 | 
			
		||||
/**
 | 
			
		||||
 * Adds an error issue
 | 
			
		||||
 * @param message error issue message
 | 
			
		||||
 */
 | 
			
		||||
export declare function error(message: string): void;
 | 
			
		||||
/**
 | 
			
		||||
 * Adds an warning issue
 | 
			
		||||
 * @param message warning issue message
 | 
			
		||||
 */
 | 
			
		||||
export declare function warning(message: string): void;
 | 
			
		||||
							
								
								
									
										116
									
								
								node_modules/@actions/core/lib/core.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										116
									
								
								node_modules/@actions/core/lib/core.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,116 +0,0 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
const command_1 = require("./command");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
/**
 | 
			
		||||
 * The code to exit an action
 | 
			
		||||
 */
 | 
			
		||||
var ExitCode;
 | 
			
		||||
(function (ExitCode) {
 | 
			
		||||
    /**
 | 
			
		||||
     * A code indicating that the action was successful
 | 
			
		||||
     */
 | 
			
		||||
    ExitCode[ExitCode["Success"] = 0] = "Success";
 | 
			
		||||
    /**
 | 
			
		||||
     * A code indicating that the action was a failure
 | 
			
		||||
     */
 | 
			
		||||
    ExitCode[ExitCode["Failure"] = 1] = "Failure";
 | 
			
		||||
})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
 | 
			
		||||
//-----------------------------------------------------------------------
 | 
			
		||||
// Variables
 | 
			
		||||
//-----------------------------------------------------------------------
 | 
			
		||||
/**
 | 
			
		||||
 * sets env variable for this action and future actions in the job
 | 
			
		||||
 * @param name the name of the variable to set
 | 
			
		||||
 * @param val the value of the variable
 | 
			
		||||
 */
 | 
			
		||||
function exportVariable(name, val) {
 | 
			
		||||
    process.env[name] = val;
 | 
			
		||||
    command_1.issueCommand('set-env', { name }, val);
 | 
			
		||||
}
 | 
			
		||||
exports.exportVariable = exportVariable;
 | 
			
		||||
/**
 | 
			
		||||
 * exports the variable and registers a secret which will get masked from logs
 | 
			
		||||
 * @param name the name of the variable to set
 | 
			
		||||
 * @param val value of the secret
 | 
			
		||||
 */
 | 
			
		||||
function exportSecret(name, val) {
 | 
			
		||||
    exportVariable(name, val);
 | 
			
		||||
    command_1.issueCommand('set-secret', {}, val);
 | 
			
		||||
}
 | 
			
		||||
exports.exportSecret = exportSecret;
 | 
			
		||||
/**
 | 
			
		||||
 * Prepends inputPath to the PATH (for this action and future actions)
 | 
			
		||||
 * @param inputPath
 | 
			
		||||
 */
 | 
			
		||||
function addPath(inputPath) {
 | 
			
		||||
    command_1.issueCommand('add-path', {}, inputPath);
 | 
			
		||||
    process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
 | 
			
		||||
}
 | 
			
		||||
exports.addPath = addPath;
 | 
			
		||||
/**
 | 
			
		||||
 * Gets the value of an input.  The value is also trimmed.
 | 
			
		||||
 *
 | 
			
		||||
 * @param     name     name of the input to get
 | 
			
		||||
 * @param     options  optional. See InputOptions.
 | 
			
		||||
 * @returns   string
 | 
			
		||||
 */
 | 
			
		||||
function getInput(name, options) {
 | 
			
		||||
    const val = process.env[`INPUT_${name.replace(' ', '_').toUpperCase()}`] || '';
 | 
			
		||||
    if (options && options.required && !val) {
 | 
			
		||||
        throw new Error(`Input required and not supplied: ${name}`);
 | 
			
		||||
    }
 | 
			
		||||
    return val.trim();
 | 
			
		||||
}
 | 
			
		||||
exports.getInput = getInput;
 | 
			
		||||
/**
 | 
			
		||||
 * Sets the value of an output.
 | 
			
		||||
 *
 | 
			
		||||
 * @param     name     name of the output to set
 | 
			
		||||
 * @param     value    value to store
 | 
			
		||||
 */
 | 
			
		||||
function setOutput(name, value) {
 | 
			
		||||
    command_1.issueCommand('set-output', { name }, value);
 | 
			
		||||
}
 | 
			
		||||
exports.setOutput = setOutput;
 | 
			
		||||
//-----------------------------------------------------------------------
 | 
			
		||||
// Results
 | 
			
		||||
//-----------------------------------------------------------------------
 | 
			
		||||
/**
 | 
			
		||||
 * Sets the action status to failed.
 | 
			
		||||
 * When the action exits it will be with an exit code of 1
 | 
			
		||||
 * @param message add error issue message
 | 
			
		||||
 */
 | 
			
		||||
function setFailed(message) {
 | 
			
		||||
    process.exitCode = ExitCode.Failure;
 | 
			
		||||
    error(message);
 | 
			
		||||
}
 | 
			
		||||
exports.setFailed = setFailed;
 | 
			
		||||
//-----------------------------------------------------------------------
 | 
			
		||||
// Logging Commands
 | 
			
		||||
//-----------------------------------------------------------------------
 | 
			
		||||
/**
 | 
			
		||||
 * Writes debug message to user log
 | 
			
		||||
 * @param message debug message
 | 
			
		||||
 */
 | 
			
		||||
function debug(message) {
 | 
			
		||||
    command_1.issueCommand('debug', {}, message);
 | 
			
		||||
}
 | 
			
		||||
exports.debug = debug;
 | 
			
		||||
/**
 | 
			
		||||
 * Adds an error issue
 | 
			
		||||
 * @param message error issue message
 | 
			
		||||
 */
 | 
			
		||||
function error(message) {
 | 
			
		||||
    command_1.issue('error', message);
 | 
			
		||||
}
 | 
			
		||||
exports.error = error;
 | 
			
		||||
/**
 | 
			
		||||
 * Adds an warning issue
 | 
			
		||||
 * @param message warning issue message
 | 
			
		||||
 */
 | 
			
		||||
function warning(message) {
 | 
			
		||||
    command_1.issue('warning', message);
 | 
			
		||||
}
 | 
			
		||||
exports.warning = warning;
 | 
			
		||||
//# sourceMappingURL=core.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/@actions/core/lib/core.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/@actions/core/lib/core.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;AAAA,uCAA6C;AAE7C,6BAA4B;AAU5B;;GAEG;AACH,IAAY,QAUX;AAVD,WAAY,QAAQ;IAClB;;OAEG;IACH,6CAAW,CAAA;IAEX;;OAEG;IACH,6CAAW,CAAA;AACb,CAAC,EAVW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAUnB;AAED,yEAAyE;AACzE,YAAY;AACZ,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,GAAW;IACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;IACvB,sBAAY,CAAC,SAAS,EAAE,EAAC,IAAI,EAAC,EAAE,GAAG,CAAC,CAAA;AACtC,CAAC;AAHD,wCAGC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,IAAY,EAAE,GAAW;IACpD,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACzB,sBAAY,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;AACrC,CAAC;AAHD,oCAGC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,SAAiB;IACvC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;AAC7E,CAAC;AAHD,0BAGC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAsB;IAC3D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IACpE,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAA;KAC5D;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AARD,4BAQC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED,yEAAyE;AACzE,UAAU;AACV,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAA;IACnC,KAAK,CAAC,OAAO,CAAC,CAAA;AAChB,CAAC;AAHD,8BAGC;AAED,yEAAyE;AACzE,mBAAmB;AACnB,yEAAyE;AAEzE;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,sBAAY,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,eAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACzB,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAe;IACrC,eAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC3B,CAAC;AAFD,0BAEC"}
 | 
			
		||||
							
								
								
									
										64
									
								
								node_modules/@actions/core/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										64
									
								
								node_modules/@actions/core/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,64 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "_from": "@actions/core@^1.0.0",
 | 
			
		||||
  "_id": "@actions/core@1.0.0",
 | 
			
		||||
  "_inBundle": false,
 | 
			
		||||
  "_integrity": "sha512-aMIlkx96XH4E/2YZtEOeyrYQfhlas9jIRkfGPqMwXD095Rdkzo4lB6ZmbxPQSzD+e1M+Xsm98ZhuSMYGv/AlqA==",
 | 
			
		||||
  "_location": "/@actions/core",
 | 
			
		||||
  "_phantomChildren": {},
 | 
			
		||||
  "_requested": {
 | 
			
		||||
    "type": "range",
 | 
			
		||||
    "registry": true,
 | 
			
		||||
    "raw": "@actions/core@^1.0.0",
 | 
			
		||||
    "name": "@actions/core",
 | 
			
		||||
    "escapedName": "@actions%2fcore",
 | 
			
		||||
    "scope": "@actions",
 | 
			
		||||
    "rawSpec": "^1.0.0",
 | 
			
		||||
    "saveSpec": null,
 | 
			
		||||
    "fetchSpec": "^1.0.0"
 | 
			
		||||
  },
 | 
			
		||||
  "_requiredBy": [
 | 
			
		||||
    "/",
 | 
			
		||||
    "/@actions/tool-cache"
 | 
			
		||||
  ],
 | 
			
		||||
  "_resolved": "https://registry.npmjs.org/@actions/core/-/core-1.0.0.tgz",
 | 
			
		||||
  "_shasum": "4a090a2e958cc300b9ea802331034d5faf42d239",
 | 
			
		||||
  "_spec": "@actions/core@^1.0.0",
 | 
			
		||||
  "_where": "C:\\Users\\damccorm\\Documents\\setup-python",
 | 
			
		||||
  "bugs": {
 | 
			
		||||
    "url": "https://github.com/actions/toolkit/issues"
 | 
			
		||||
  },
 | 
			
		||||
  "bundleDependencies": false,
 | 
			
		||||
  "deprecated": false,
 | 
			
		||||
  "description": "Actions core lib",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@types/node": "^12.0.2"
 | 
			
		||||
  },
 | 
			
		||||
  "directories": {
 | 
			
		||||
    "lib": "lib",
 | 
			
		||||
    "test": "__tests__"
 | 
			
		||||
  },
 | 
			
		||||
  "files": [
 | 
			
		||||
    "lib"
 | 
			
		||||
  ],
 | 
			
		||||
  "gitHead": "a40bce7c8d382aa3dbadaa327acbc696e9390e55",
 | 
			
		||||
  "homepage": "https://github.com/actions/toolkit/tree/master/packages/core",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "core",
 | 
			
		||||
    "actions"
 | 
			
		||||
  ],
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "main": "lib/core.js",
 | 
			
		||||
  "name": "@actions/core",
 | 
			
		||||
  "publishConfig": {
 | 
			
		||||
    "access": "public"
 | 
			
		||||
  },
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git+https://github.com/actions/toolkit.git"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: run tests from root\" && exit 1",
 | 
			
		||||
    "tsc": "tsc"
 | 
			
		||||
  },
 | 
			
		||||
  "version": "1.0.0"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										60
									
								
								node_modules/@actions/exec/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										60
									
								
								node_modules/@actions/exec/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,60 +0,0 @@
 | 
			
		||||
# `@actions/exec`
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
#### Basic
 | 
			
		||||
 | 
			
		||||
You can use this package to execute your tools on the command line in a cross platform way:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const exec = require('@actions/exec');
 | 
			
		||||
 | 
			
		||||
await exec.exec('node index.js');
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Args
 | 
			
		||||
 | 
			
		||||
You can also pass in arg arrays:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const exec = require('@actions/exec');
 | 
			
		||||
 | 
			
		||||
await exec.exec('node', ['index.js', 'foo=bar']);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Output/options
 | 
			
		||||
 | 
			
		||||
Capture output or specify [other options](https://github.com/actions/toolkit/blob/d9347d4ab99fd507c0b9104b2cf79fb44fcc827d/packages/exec/src/interfaces.ts#L5):
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const exec = require('@actions/exec');
 | 
			
		||||
 | 
			
		||||
const myOutput = '';
 | 
			
		||||
const myError = '';
 | 
			
		||||
 | 
			
		||||
const options = {};
 | 
			
		||||
options.listeners = {
 | 
			
		||||
  stdout: (data: Buffer) => {
 | 
			
		||||
    myOutput += data.toString();
 | 
			
		||||
  },
 | 
			
		||||
  stderr: (data: Buffer) => {
 | 
			
		||||
    myError += data.toString();
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
options.cwd = './lib';
 | 
			
		||||
 | 
			
		||||
await exec.exec('node', ['index.js', 'foo=bar'], options);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Exec tools not in the PATH
 | 
			
		||||
 | 
			
		||||
You can use it in conjunction with the `which` function from `@actions/io` to execute tools that are not in the PATH:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const exec = require('@actions/exec');
 | 
			
		||||
const io = require('@actions/io');
 | 
			
		||||
 | 
			
		||||
const pythonPath: string = await io.which('python', true)
 | 
			
		||||
 | 
			
		||||
await exec.exec(`"${pythonPath}"`, ['main.py']);
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										12
									
								
								node_modules/@actions/exec/lib/exec.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								node_modules/@actions/exec/lib/exec.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,12 +0,0 @@
 | 
			
		||||
import * as im from './interfaces';
 | 
			
		||||
/**
 | 
			
		||||
 * Exec a command.
 | 
			
		||||
 * Output will be streamed to the live console.
 | 
			
		||||
 * Returns promise with return code
 | 
			
		||||
 *
 | 
			
		||||
 * @param     commandLine        command to execute (can include additional args). Must be correctly escaped.
 | 
			
		||||
 * @param     args               optional arguments for tool. Escaping is handled by the lib.
 | 
			
		||||
 * @param     options            optional exec options.  See ExecOptions
 | 
			
		||||
 * @returns   Promise<number>    exit code
 | 
			
		||||
 */
 | 
			
		||||
export declare function exec(commandLine: string, args?: string[], options?: im.ExecOptions): Promise<number>;
 | 
			
		||||
							
								
								
									
										36
									
								
								node_modules/@actions/exec/lib/exec.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								node_modules/@actions/exec/lib/exec.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,36 +0,0 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | 
			
		||||
    return new (P || (P = Promise))(function (resolve, reject) {
 | 
			
		||||
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
 | 
			
		||||
        step((generator = generator.apply(thisArg, _arguments || [])).next());
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
const tr = require("./toolrunner");
 | 
			
		||||
/**
 | 
			
		||||
 * Exec a command.
 | 
			
		||||
 * Output will be streamed to the live console.
 | 
			
		||||
 * Returns promise with return code
 | 
			
		||||
 *
 | 
			
		||||
 * @param     commandLine        command to execute (can include additional args). Must be correctly escaped.
 | 
			
		||||
 * @param     args               optional arguments for tool. Escaping is handled by the lib.
 | 
			
		||||
 * @param     options            optional exec options.  See ExecOptions
 | 
			
		||||
 * @returns   Promise<number>    exit code
 | 
			
		||||
 */
 | 
			
		||||
function exec(commandLine, args, options) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        const commandArgs = tr.argStringToArray(commandLine);
 | 
			
		||||
        if (commandArgs.length === 0) {
 | 
			
		||||
            throw new Error(`Parameter 'commandLine' cannot be null or empty.`);
 | 
			
		||||
        }
 | 
			
		||||
        // Path to tool to execute should be first arg
 | 
			
		||||
        const toolPath = commandArgs[0];
 | 
			
		||||
        args = commandArgs.slice(1).concat(args || []);
 | 
			
		||||
        const runner = new tr.ToolRunner(toolPath, args, options);
 | 
			
		||||
        return runner.exec();
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.exec = exec;
 | 
			
		||||
//# sourceMappingURL=exec.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/@actions/exec/lib/exec.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/@actions/exec/lib/exec.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":";;;;;;;;;;AACA,mCAAkC;AAElC;;;;;;;;;GASG;AACH,SAAsB,IAAI,CACxB,WAAmB,EACnB,IAAe,EACf,OAAwB;;QAExB,MAAM,WAAW,GAAG,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;QACpD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;SACpE;QACD,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAkB,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QACxE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;IACtB,CAAC;CAAA;AAdD,oBAcC"}
 | 
			
		||||
							
								
								
									
										35
									
								
								node_modules/@actions/exec/lib/interfaces.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								node_modules/@actions/exec/lib/interfaces.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,35 +0,0 @@
 | 
			
		||||
/// <reference types="node" />
 | 
			
		||||
import * as stream from 'stream';
 | 
			
		||||
/**
 | 
			
		||||
 * Interface for exec options
 | 
			
		||||
 */
 | 
			
		||||
export interface ExecOptions {
 | 
			
		||||
    /** optional working directory.  defaults to current */
 | 
			
		||||
    cwd?: string;
 | 
			
		||||
    /** optional envvar dictionary.  defaults to current process's env */
 | 
			
		||||
    env?: {
 | 
			
		||||
        [key: string]: string;
 | 
			
		||||
    };
 | 
			
		||||
    /** optional.  defaults to false */
 | 
			
		||||
    silent?: boolean;
 | 
			
		||||
    /** optional out stream to use. Defaults to process.stdout */
 | 
			
		||||
    outStream?: stream.Writable;
 | 
			
		||||
    /** optional err stream to use. Defaults to process.stderr */
 | 
			
		||||
    errStream?: stream.Writable;
 | 
			
		||||
    /** optional. whether to skip quoting/escaping arguments if needed.  defaults to false. */
 | 
			
		||||
    windowsVerbatimArguments?: boolean;
 | 
			
		||||
    /** optional.  whether to fail if output to stderr.  defaults to false */
 | 
			
		||||
    failOnStdErr?: boolean;
 | 
			
		||||
    /** optional.  defaults to failing on non zero.  ignore will not fail leaving it up to the caller */
 | 
			
		||||
    ignoreReturnCode?: boolean;
 | 
			
		||||
    /** optional. How long in ms to wait for STDIO streams to close after the exit event of the process before terminating. defaults to 10000 */
 | 
			
		||||
    delay?: number;
 | 
			
		||||
    /** optional. Listeners for output. Callback functions that will be called on these events */
 | 
			
		||||
    listeners?: {
 | 
			
		||||
        stdout?: (data: Buffer) => void;
 | 
			
		||||
        stderr?: (data: Buffer) => void;
 | 
			
		||||
        stdline?: (data: string) => void;
 | 
			
		||||
        errline?: (data: string) => void;
 | 
			
		||||
        debug?: (data: string) => void;
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3
									
								
								node_modules/@actions/exec/lib/interfaces.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								node_modules/@actions/exec/lib/interfaces.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,3 +0,0 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
//# sourceMappingURL=interfaces.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/@actions/exec/lib/interfaces.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/@actions/exec/lib/interfaces.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":""}
 | 
			
		||||
							
								
								
									
										37
									
								
								node_modules/@actions/exec/lib/toolrunner.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										37
									
								
								node_modules/@actions/exec/lib/toolrunner.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,37 +0,0 @@
 | 
			
		||||
/// <reference types="node" />
 | 
			
		||||
import * as events from 'events';
 | 
			
		||||
import * as im from './interfaces';
 | 
			
		||||
export declare class ToolRunner extends events.EventEmitter {
 | 
			
		||||
    constructor(toolPath: string, args?: string[], options?: im.ExecOptions);
 | 
			
		||||
    private toolPath;
 | 
			
		||||
    private args;
 | 
			
		||||
    private options;
 | 
			
		||||
    private _debug;
 | 
			
		||||
    private _getCommandString;
 | 
			
		||||
    private _processLineBuffer;
 | 
			
		||||
    private _getSpawnFileName;
 | 
			
		||||
    private _getSpawnArgs;
 | 
			
		||||
    private _endsWith;
 | 
			
		||||
    private _isCmdFile;
 | 
			
		||||
    private _windowsQuoteCmdArg;
 | 
			
		||||
    private _uvQuoteCmdArg;
 | 
			
		||||
    private _cloneExecOptions;
 | 
			
		||||
    private _getSpawnOptions;
 | 
			
		||||
    /**
 | 
			
		||||
     * Exec a tool.
 | 
			
		||||
     * Output will be streamed to the live console.
 | 
			
		||||
     * Returns promise with return code
 | 
			
		||||
     *
 | 
			
		||||
     * @param     tool     path to tool to exec
 | 
			
		||||
     * @param     options  optional exec options.  See ExecOptions
 | 
			
		||||
     * @returns   number
 | 
			
		||||
     */
 | 
			
		||||
    exec(): Promise<number>;
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * Convert an arg string to an array of args. Handles escaping
 | 
			
		||||
 *
 | 
			
		||||
 * @param    argString   string of arguments
 | 
			
		||||
 * @returns  string[]    array of arguments
 | 
			
		||||
 */
 | 
			
		||||
export declare function argStringToArray(argString: string): string[];
 | 
			
		||||
							
								
								
									
										573
									
								
								node_modules/@actions/exec/lib/toolrunner.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										573
									
								
								node_modules/@actions/exec/lib/toolrunner.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,573 +0,0 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | 
			
		||||
    return new (P || (P = Promise))(function (resolve, reject) {
 | 
			
		||||
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
 | 
			
		||||
        step((generator = generator.apply(thisArg, _arguments || [])).next());
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
const os = require("os");
 | 
			
		||||
const events = require("events");
 | 
			
		||||
const child = require("child_process");
 | 
			
		||||
/* eslint-disable @typescript-eslint/unbound-method */
 | 
			
		||||
const IS_WINDOWS = process.platform === 'win32';
 | 
			
		||||
/*
 | 
			
		||||
 * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way.
 | 
			
		||||
 */
 | 
			
		||||
class ToolRunner extends events.EventEmitter {
 | 
			
		||||
    constructor(toolPath, args, options) {
 | 
			
		||||
        super();
 | 
			
		||||
        if (!toolPath) {
 | 
			
		||||
            throw new Error("Parameter 'toolPath' cannot be null or empty.");
 | 
			
		||||
        }
 | 
			
		||||
        this.toolPath = toolPath;
 | 
			
		||||
        this.args = args || [];
 | 
			
		||||
        this.options = options || {};
 | 
			
		||||
    }
 | 
			
		||||
    _debug(message) {
 | 
			
		||||
        if (this.options.listeners && this.options.listeners.debug) {
 | 
			
		||||
            this.options.listeners.debug(message);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    _getCommandString(options, noPrefix) {
 | 
			
		||||
        const toolPath = this._getSpawnFileName();
 | 
			
		||||
        const args = this._getSpawnArgs(options);
 | 
			
		||||
        let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool
 | 
			
		||||
        if (IS_WINDOWS) {
 | 
			
		||||
            // Windows + cmd file
 | 
			
		||||
            if (this._isCmdFile()) {
 | 
			
		||||
                cmd += toolPath;
 | 
			
		||||
                for (const a of args) {
 | 
			
		||||
                    cmd += ` ${a}`;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // Windows + verbatim
 | 
			
		||||
            else if (options.windowsVerbatimArguments) {
 | 
			
		||||
                cmd += `"${toolPath}"`;
 | 
			
		||||
                for (const a of args) {
 | 
			
		||||
                    cmd += ` ${a}`;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // Windows (regular)
 | 
			
		||||
            else {
 | 
			
		||||
                cmd += this._windowsQuoteCmdArg(toolPath);
 | 
			
		||||
                for (const a of args) {
 | 
			
		||||
                    cmd += ` ${this._windowsQuoteCmdArg(a)}`;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            // OSX/Linux - this can likely be improved with some form of quoting.
 | 
			
		||||
            // creating processes on Unix is fundamentally different than Windows.
 | 
			
		||||
            // on Unix, execvp() takes an arg array.
 | 
			
		||||
            cmd += toolPath;
 | 
			
		||||
            for (const a of args) {
 | 
			
		||||
                cmd += ` ${a}`;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return cmd;
 | 
			
		||||
    }
 | 
			
		||||
    _processLineBuffer(data, strBuffer, onLine) {
 | 
			
		||||
        try {
 | 
			
		||||
            let s = strBuffer + data.toString();
 | 
			
		||||
            let n = s.indexOf(os.EOL);
 | 
			
		||||
            while (n > -1) {
 | 
			
		||||
                const line = s.substring(0, n);
 | 
			
		||||
                onLine(line);
 | 
			
		||||
                // the rest of the string ...
 | 
			
		||||
                s = s.substring(n + os.EOL.length);
 | 
			
		||||
                n = s.indexOf(os.EOL);
 | 
			
		||||
            }
 | 
			
		||||
            strBuffer = s;
 | 
			
		||||
        }
 | 
			
		||||
        catch (err) {
 | 
			
		||||
            // streaming lines to console is best effort.  Don't fail a build.
 | 
			
		||||
            this._debug(`error processing line. Failed with error ${err}`);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    _getSpawnFileName() {
 | 
			
		||||
        if (IS_WINDOWS) {
 | 
			
		||||
            if (this._isCmdFile()) {
 | 
			
		||||
                return process.env['COMSPEC'] || 'cmd.exe';
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return this.toolPath;
 | 
			
		||||
    }
 | 
			
		||||
    _getSpawnArgs(options) {
 | 
			
		||||
        if (IS_WINDOWS) {
 | 
			
		||||
            if (this._isCmdFile()) {
 | 
			
		||||
                let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;
 | 
			
		||||
                for (const a of this.args) {
 | 
			
		||||
                    argline += ' ';
 | 
			
		||||
                    argline += options.windowsVerbatimArguments
 | 
			
		||||
                        ? a
 | 
			
		||||
                        : this._windowsQuoteCmdArg(a);
 | 
			
		||||
                }
 | 
			
		||||
                argline += '"';
 | 
			
		||||
                return [argline];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return this.args;
 | 
			
		||||
    }
 | 
			
		||||
    _endsWith(str, end) {
 | 
			
		||||
        return str.endsWith(end);
 | 
			
		||||
    }
 | 
			
		||||
    _isCmdFile() {
 | 
			
		||||
        const upperToolPath = this.toolPath.toUpperCase();
 | 
			
		||||
        return (this._endsWith(upperToolPath, '.CMD') ||
 | 
			
		||||
            this._endsWith(upperToolPath, '.BAT'));
 | 
			
		||||
    }
 | 
			
		||||
    _windowsQuoteCmdArg(arg) {
 | 
			
		||||
        // for .exe, apply the normal quoting rules that libuv applies
 | 
			
		||||
        if (!this._isCmdFile()) {
 | 
			
		||||
            return this._uvQuoteCmdArg(arg);
 | 
			
		||||
        }
 | 
			
		||||
        // otherwise apply quoting rules specific to the cmd.exe command line parser.
 | 
			
		||||
        // the libuv rules are generic and are not designed specifically for cmd.exe
 | 
			
		||||
        // command line parser.
 | 
			
		||||
        //
 | 
			
		||||
        // for a detailed description of the cmd.exe command line parser, refer to
 | 
			
		||||
        // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912
 | 
			
		||||
        // need quotes for empty arg
 | 
			
		||||
        if (!arg) {
 | 
			
		||||
            return '""';
 | 
			
		||||
        }
 | 
			
		||||
        // determine whether the arg needs to be quoted
 | 
			
		||||
        const cmdSpecialChars = [
 | 
			
		||||
            ' ',
 | 
			
		||||
            '\t',
 | 
			
		||||
            '&',
 | 
			
		||||
            '(',
 | 
			
		||||
            ')',
 | 
			
		||||
            '[',
 | 
			
		||||
            ']',
 | 
			
		||||
            '{',
 | 
			
		||||
            '}',
 | 
			
		||||
            '^',
 | 
			
		||||
            '=',
 | 
			
		||||
            ';',
 | 
			
		||||
            '!',
 | 
			
		||||
            "'",
 | 
			
		||||
            '+',
 | 
			
		||||
            ',',
 | 
			
		||||
            '`',
 | 
			
		||||
            '~',
 | 
			
		||||
            '|',
 | 
			
		||||
            '<',
 | 
			
		||||
            '>',
 | 
			
		||||
            '"'
 | 
			
		||||
        ];
 | 
			
		||||
        let needsQuotes = false;
 | 
			
		||||
        for (const char of arg) {
 | 
			
		||||
            if (cmdSpecialChars.some(x => x === char)) {
 | 
			
		||||
                needsQuotes = true;
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // short-circuit if quotes not needed
 | 
			
		||||
        if (!needsQuotes) {
 | 
			
		||||
            return arg;
 | 
			
		||||
        }
 | 
			
		||||
        // the following quoting rules are very similar to the rules that by libuv applies.
 | 
			
		||||
        //
 | 
			
		||||
        // 1) wrap the string in quotes
 | 
			
		||||
        //
 | 
			
		||||
        // 2) double-up quotes - i.e. " => ""
 | 
			
		||||
        //
 | 
			
		||||
        //    this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately
 | 
			
		||||
        //    doesn't work well with a cmd.exe command line.
 | 
			
		||||
        //
 | 
			
		||||
        //    note, replacing " with "" also works well if the arg is passed to a downstream .NET console app.
 | 
			
		||||
        //    for example, the command line:
 | 
			
		||||
        //          foo.exe "myarg:""my val"""
 | 
			
		||||
        //    is parsed by a .NET console app into an arg array:
 | 
			
		||||
        //          [ "myarg:\"my val\"" ]
 | 
			
		||||
        //    which is the same end result when applying libuv quoting rules. although the actual
 | 
			
		||||
        //    command line from libuv quoting rules would look like:
 | 
			
		||||
        //          foo.exe "myarg:\"my val\""
 | 
			
		||||
        //
 | 
			
		||||
        // 3) double-up slashes that preceed a quote,
 | 
			
		||||
        //    e.g.  hello \world    => "hello \world"
 | 
			
		||||
        //          hello\"world    => "hello\\""world"
 | 
			
		||||
        //          hello\\"world   => "hello\\\\""world"
 | 
			
		||||
        //          hello world\    => "hello world\\"
 | 
			
		||||
        //
 | 
			
		||||
        //    technically this is not required for a cmd.exe command line, or the batch argument parser.
 | 
			
		||||
        //    the reasons for including this as a .cmd quoting rule are:
 | 
			
		||||
        //
 | 
			
		||||
        //    a) this is optimized for the scenario where the argument is passed from the .cmd file to an
 | 
			
		||||
        //       external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule.
 | 
			
		||||
        //
 | 
			
		||||
        //    b) it's what we've been doing previously (by deferring to node default behavior) and we
 | 
			
		||||
        //       haven't heard any complaints about that aspect.
 | 
			
		||||
        //
 | 
			
		||||
        // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be
 | 
			
		||||
        // escaped when used on the command line directly - even though within a .cmd file % can be escaped
 | 
			
		||||
        // by using %%.
 | 
			
		||||
        //
 | 
			
		||||
        // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts
 | 
			
		||||
        // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing.
 | 
			
		||||
        //
 | 
			
		||||
        // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would
 | 
			
		||||
        // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the
 | 
			
		||||
        // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args
 | 
			
		||||
        // to an external program.
 | 
			
		||||
        //
 | 
			
		||||
        // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file.
 | 
			
		||||
        // % can be escaped within a .cmd file.
 | 
			
		||||
        let reverse = '"';
 | 
			
		||||
        let quoteHit = true;
 | 
			
		||||
        for (let i = arg.length; i > 0; i--) {
 | 
			
		||||
            // walk the string in reverse
 | 
			
		||||
            reverse += arg[i - 1];
 | 
			
		||||
            if (quoteHit && arg[i - 1] === '\\') {
 | 
			
		||||
                reverse += '\\'; // double the slash
 | 
			
		||||
            }
 | 
			
		||||
            else if (arg[i - 1] === '"') {
 | 
			
		||||
                quoteHit = true;
 | 
			
		||||
                reverse += '"'; // double the quote
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                quoteHit = false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        reverse += '"';
 | 
			
		||||
        return reverse
 | 
			
		||||
            .split('')
 | 
			
		||||
            .reverse()
 | 
			
		||||
            .join('');
 | 
			
		||||
    }
 | 
			
		||||
    _uvQuoteCmdArg(arg) {
 | 
			
		||||
        // Tool runner wraps child_process.spawn() and needs to apply the same quoting as
 | 
			
		||||
        // Node in certain cases where the undocumented spawn option windowsVerbatimArguments
 | 
			
		||||
        // is used.
 | 
			
		||||
        //
 | 
			
		||||
        // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV,
 | 
			
		||||
        // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details),
 | 
			
		||||
        // pasting copyright notice from Node within this function:
 | 
			
		||||
        //
 | 
			
		||||
        //      Copyright Joyent, Inc. and other Node contributors. All rights reserved.
 | 
			
		||||
        //
 | 
			
		||||
        //      Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
        //      of this software and associated documentation files (the "Software"), to
 | 
			
		||||
        //      deal in the Software without restriction, including without limitation the
 | 
			
		||||
        //      rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 | 
			
		||||
        //      sell copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
        //      furnished to do so, subject to the following conditions:
 | 
			
		||||
        //
 | 
			
		||||
        //      The above copyright notice and this permission notice shall be included in
 | 
			
		||||
        //      all copies or substantial portions of the Software.
 | 
			
		||||
        //
 | 
			
		||||
        //      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
        //      IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
        //      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
        //      AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
        //      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
        //      FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 | 
			
		||||
        //      IN THE SOFTWARE.
 | 
			
		||||
        if (!arg) {
 | 
			
		||||
            // Need double quotation for empty argument
 | 
			
		||||
            return '""';
 | 
			
		||||
        }
 | 
			
		||||
        if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) {
 | 
			
		||||
            // No quotation needed
 | 
			
		||||
            return arg;
 | 
			
		||||
        }
 | 
			
		||||
        if (!arg.includes('"') && !arg.includes('\\')) {
 | 
			
		||||
            // No embedded double quotes or backslashes, so I can just wrap
 | 
			
		||||
            // quote marks around the whole thing.
 | 
			
		||||
            return `"${arg}"`;
 | 
			
		||||
        }
 | 
			
		||||
        // Expected input/output:
 | 
			
		||||
        //   input : hello"world
 | 
			
		||||
        //   output: "hello\"world"
 | 
			
		||||
        //   input : hello""world
 | 
			
		||||
        //   output: "hello\"\"world"
 | 
			
		||||
        //   input : hello\world
 | 
			
		||||
        //   output: hello\world
 | 
			
		||||
        //   input : hello\\world
 | 
			
		||||
        //   output: hello\\world
 | 
			
		||||
        //   input : hello\"world
 | 
			
		||||
        //   output: "hello\\\"world"
 | 
			
		||||
        //   input : hello\\"world
 | 
			
		||||
        //   output: "hello\\\\\"world"
 | 
			
		||||
        //   input : hello world\
 | 
			
		||||
        //   output: "hello world\\" - note the comment in libuv actually reads "hello world\"
 | 
			
		||||
        //                             but it appears the comment is wrong, it should be "hello world\\"
 | 
			
		||||
        let reverse = '"';
 | 
			
		||||
        let quoteHit = true;
 | 
			
		||||
        for (let i = arg.length; i > 0; i--) {
 | 
			
		||||
            // walk the string in reverse
 | 
			
		||||
            reverse += arg[i - 1];
 | 
			
		||||
            if (quoteHit && arg[i - 1] === '\\') {
 | 
			
		||||
                reverse += '\\';
 | 
			
		||||
            }
 | 
			
		||||
            else if (arg[i - 1] === '"') {
 | 
			
		||||
                quoteHit = true;
 | 
			
		||||
                reverse += '\\';
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                quoteHit = false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        reverse += '"';
 | 
			
		||||
        return reverse
 | 
			
		||||
            .split('')
 | 
			
		||||
            .reverse()
 | 
			
		||||
            .join('');
 | 
			
		||||
    }
 | 
			
		||||
    _cloneExecOptions(options) {
 | 
			
		||||
        options = options || {};
 | 
			
		||||
        const result = {
 | 
			
		||||
            cwd: options.cwd || process.cwd(),
 | 
			
		||||
            env: options.env || process.env,
 | 
			
		||||
            silent: options.silent || false,
 | 
			
		||||
            windowsVerbatimArguments: options.windowsVerbatimArguments || false,
 | 
			
		||||
            failOnStdErr: options.failOnStdErr || false,
 | 
			
		||||
            ignoreReturnCode: options.ignoreReturnCode || false,
 | 
			
		||||
            delay: options.delay || 10000
 | 
			
		||||
        };
 | 
			
		||||
        result.outStream = options.outStream || process.stdout;
 | 
			
		||||
        result.errStream = options.errStream || process.stderr;
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
    _getSpawnOptions(options, toolPath) {
 | 
			
		||||
        options = options || {};
 | 
			
		||||
        const result = {};
 | 
			
		||||
        result.cwd = options.cwd;
 | 
			
		||||
        result.env = options.env;
 | 
			
		||||
        result['windowsVerbatimArguments'] =
 | 
			
		||||
            options.windowsVerbatimArguments || this._isCmdFile();
 | 
			
		||||
        if (options.windowsVerbatimArguments) {
 | 
			
		||||
            result.argv0 = `"${toolPath}"`;
 | 
			
		||||
        }
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
     * Exec a tool.
 | 
			
		||||
     * Output will be streamed to the live console.
 | 
			
		||||
     * Returns promise with return code
 | 
			
		||||
     *
 | 
			
		||||
     * @param     tool     path to tool to exec
 | 
			
		||||
     * @param     options  optional exec options.  See ExecOptions
 | 
			
		||||
     * @returns   number
 | 
			
		||||
     */
 | 
			
		||||
    exec() {
 | 
			
		||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
            return new Promise((resolve, reject) => {
 | 
			
		||||
                this._debug(`exec tool: ${this.toolPath}`);
 | 
			
		||||
                this._debug('arguments:');
 | 
			
		||||
                for (const arg of this.args) {
 | 
			
		||||
                    this._debug(`   ${arg}`);
 | 
			
		||||
                }
 | 
			
		||||
                const optionsNonNull = this._cloneExecOptions(this.options);
 | 
			
		||||
                if (!optionsNonNull.silent && optionsNonNull.outStream) {
 | 
			
		||||
                    optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL);
 | 
			
		||||
                }
 | 
			
		||||
                const state = new ExecState(optionsNonNull, this.toolPath);
 | 
			
		||||
                state.on('debug', (message) => {
 | 
			
		||||
                    this._debug(message);
 | 
			
		||||
                });
 | 
			
		||||
                const fileName = this._getSpawnFileName();
 | 
			
		||||
                const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName));
 | 
			
		||||
                const stdbuffer = '';
 | 
			
		||||
                if (cp.stdout) {
 | 
			
		||||
                    cp.stdout.on('data', (data) => {
 | 
			
		||||
                        if (this.options.listeners && this.options.listeners.stdout) {
 | 
			
		||||
                            this.options.listeners.stdout(data);
 | 
			
		||||
                        }
 | 
			
		||||
                        if (!optionsNonNull.silent && optionsNonNull.outStream) {
 | 
			
		||||
                            optionsNonNull.outStream.write(data);
 | 
			
		||||
                        }
 | 
			
		||||
                        this._processLineBuffer(data, stdbuffer, (line) => {
 | 
			
		||||
                            if (this.options.listeners && this.options.listeners.stdline) {
 | 
			
		||||
                                this.options.listeners.stdline(line);
 | 
			
		||||
                            }
 | 
			
		||||
                        });
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
                const errbuffer = '';
 | 
			
		||||
                if (cp.stderr) {
 | 
			
		||||
                    cp.stderr.on('data', (data) => {
 | 
			
		||||
                        state.processStderr = true;
 | 
			
		||||
                        if (this.options.listeners && this.options.listeners.stderr) {
 | 
			
		||||
                            this.options.listeners.stderr(data);
 | 
			
		||||
                        }
 | 
			
		||||
                        if (!optionsNonNull.silent &&
 | 
			
		||||
                            optionsNonNull.errStream &&
 | 
			
		||||
                            optionsNonNull.outStream) {
 | 
			
		||||
                            const s = optionsNonNull.failOnStdErr
 | 
			
		||||
                                ? optionsNonNull.errStream
 | 
			
		||||
                                : optionsNonNull.outStream;
 | 
			
		||||
                            s.write(data);
 | 
			
		||||
                        }
 | 
			
		||||
                        this._processLineBuffer(data, errbuffer, (line) => {
 | 
			
		||||
                            if (this.options.listeners && this.options.listeners.errline) {
 | 
			
		||||
                                this.options.listeners.errline(line);
 | 
			
		||||
                            }
 | 
			
		||||
                        });
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
                cp.on('error', (err) => {
 | 
			
		||||
                    state.processError = err.message;
 | 
			
		||||
                    state.processExited = true;
 | 
			
		||||
                    state.processClosed = true;
 | 
			
		||||
                    state.CheckComplete();
 | 
			
		||||
                });
 | 
			
		||||
                cp.on('exit', (code) => {
 | 
			
		||||
                    state.processExitCode = code;
 | 
			
		||||
                    state.processExited = true;
 | 
			
		||||
                    this._debug(`Exit code ${code} received from tool '${this.toolPath}'`);
 | 
			
		||||
                    state.CheckComplete();
 | 
			
		||||
                });
 | 
			
		||||
                cp.on('close', (code) => {
 | 
			
		||||
                    state.processExitCode = code;
 | 
			
		||||
                    state.processExited = true;
 | 
			
		||||
                    state.processClosed = true;
 | 
			
		||||
                    this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);
 | 
			
		||||
                    state.CheckComplete();
 | 
			
		||||
                });
 | 
			
		||||
                state.on('done', (error, exitCode) => {
 | 
			
		||||
                    if (stdbuffer.length > 0) {
 | 
			
		||||
                        this.emit('stdline', stdbuffer);
 | 
			
		||||
                    }
 | 
			
		||||
                    if (errbuffer.length > 0) {
 | 
			
		||||
                        this.emit('errline', errbuffer);
 | 
			
		||||
                    }
 | 
			
		||||
                    cp.removeAllListeners();
 | 
			
		||||
                    if (error) {
 | 
			
		||||
                        reject(error);
 | 
			
		||||
                    }
 | 
			
		||||
                    else {
 | 
			
		||||
                        resolve(exitCode);
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
exports.ToolRunner = ToolRunner;
 | 
			
		||||
/**
 | 
			
		||||
 * Convert an arg string to an array of args. Handles escaping
 | 
			
		||||
 *
 | 
			
		||||
 * @param    argString   string of arguments
 | 
			
		||||
 * @returns  string[]    array of arguments
 | 
			
		||||
 */
 | 
			
		||||
function argStringToArray(argString) {
 | 
			
		||||
    const args = [];
 | 
			
		||||
    let inQuotes = false;
 | 
			
		||||
    let escaped = false;
 | 
			
		||||
    let arg = '';
 | 
			
		||||
    function append(c) {
 | 
			
		||||
        // we only escape double quotes.
 | 
			
		||||
        if (escaped && c !== '"') {
 | 
			
		||||
            arg += '\\';
 | 
			
		||||
        }
 | 
			
		||||
        arg += c;
 | 
			
		||||
        escaped = false;
 | 
			
		||||
    }
 | 
			
		||||
    for (let i = 0; i < argString.length; i++) {
 | 
			
		||||
        const c = argString.charAt(i);
 | 
			
		||||
        if (c === '"') {
 | 
			
		||||
            if (!escaped) {
 | 
			
		||||
                inQuotes = !inQuotes;
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                append(c);
 | 
			
		||||
            }
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if (c === '\\' && escaped) {
 | 
			
		||||
            append(c);
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if (c === '\\' && inQuotes) {
 | 
			
		||||
            escaped = true;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if (c === ' ' && !inQuotes) {
 | 
			
		||||
            if (arg.length > 0) {
 | 
			
		||||
                args.push(arg);
 | 
			
		||||
                arg = '';
 | 
			
		||||
            }
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        append(c);
 | 
			
		||||
    }
 | 
			
		||||
    if (arg.length > 0) {
 | 
			
		||||
        args.push(arg.trim());
 | 
			
		||||
    }
 | 
			
		||||
    return args;
 | 
			
		||||
}
 | 
			
		||||
exports.argStringToArray = argStringToArray;
 | 
			
		||||
class ExecState extends events.EventEmitter {
 | 
			
		||||
    constructor(options, toolPath) {
 | 
			
		||||
        super();
 | 
			
		||||
        this.processClosed = false; // tracks whether the process has exited and stdio is closed
 | 
			
		||||
        this.processError = '';
 | 
			
		||||
        this.processExitCode = 0;
 | 
			
		||||
        this.processExited = false; // tracks whether the process has exited
 | 
			
		||||
        this.processStderr = false; // tracks whether stderr was written to
 | 
			
		||||
        this.delay = 10000; // 10 seconds
 | 
			
		||||
        this.done = false;
 | 
			
		||||
        this.timeout = null;
 | 
			
		||||
        if (!toolPath) {
 | 
			
		||||
            throw new Error('toolPath must not be empty');
 | 
			
		||||
        }
 | 
			
		||||
        this.options = options;
 | 
			
		||||
        this.toolPath = toolPath;
 | 
			
		||||
        if (options.delay) {
 | 
			
		||||
            this.delay = options.delay;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    CheckComplete() {
 | 
			
		||||
        if (this.done) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (this.processClosed) {
 | 
			
		||||
            this._setResult();
 | 
			
		||||
        }
 | 
			
		||||
        else if (this.processExited) {
 | 
			
		||||
            this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    _debug(message) {
 | 
			
		||||
        this.emit('debug', message);
 | 
			
		||||
    }
 | 
			
		||||
    _setResult() {
 | 
			
		||||
        // determine whether there is an error
 | 
			
		||||
        let error;
 | 
			
		||||
        if (this.processExited) {
 | 
			
		||||
            if (this.processError) {
 | 
			
		||||
                error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`);
 | 
			
		||||
            }
 | 
			
		||||
            else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) {
 | 
			
		||||
                error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`);
 | 
			
		||||
            }
 | 
			
		||||
            else if (this.processStderr && this.options.failOnStdErr) {
 | 
			
		||||
                error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // clear the timeout
 | 
			
		||||
        if (this.timeout) {
 | 
			
		||||
            clearTimeout(this.timeout);
 | 
			
		||||
            this.timeout = null;
 | 
			
		||||
        }
 | 
			
		||||
        this.done = true;
 | 
			
		||||
        this.emit('done', error, this.processExitCode);
 | 
			
		||||
    }
 | 
			
		||||
    static HandleTimeout(state) {
 | 
			
		||||
        if (state.done) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (!state.processClosed && state.processExited) {
 | 
			
		||||
            const message = `The STDIO streams did not close within ${state.delay /
 | 
			
		||||
                1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;
 | 
			
		||||
            state._debug(message);
 | 
			
		||||
        }
 | 
			
		||||
        state._setResult();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
//# sourceMappingURL=toolrunner.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/@actions/exec/lib/toolrunner.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/@actions/exec/lib/toolrunner.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										63
									
								
								node_modules/@actions/exec/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										63
									
								
								node_modules/@actions/exec/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,63 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "_from": "@actions/exec@^1.0.0",
 | 
			
		||||
  "_id": "@actions/exec@1.0.0",
 | 
			
		||||
  "_inBundle": false,
 | 
			
		||||
  "_integrity": "sha512-nquH0+XKng+Ll7rZfCojN7NWSbnGh+ltwUJhzfbLkmOJgxocGX2/yXcZLMyT9fa7+tByEow/NSTrBExNlEj9fw==",
 | 
			
		||||
  "_location": "/@actions/exec",
 | 
			
		||||
  "_phantomChildren": {},
 | 
			
		||||
  "_requested": {
 | 
			
		||||
    "type": "range",
 | 
			
		||||
    "registry": true,
 | 
			
		||||
    "raw": "@actions/exec@^1.0.0",
 | 
			
		||||
    "name": "@actions/exec",
 | 
			
		||||
    "escapedName": "@actions%2fexec",
 | 
			
		||||
    "scope": "@actions",
 | 
			
		||||
    "rawSpec": "^1.0.0",
 | 
			
		||||
    "saveSpec": null,
 | 
			
		||||
    "fetchSpec": "^1.0.0"
 | 
			
		||||
  },
 | 
			
		||||
  "_requiredBy": [
 | 
			
		||||
    "/@actions/tool-cache"
 | 
			
		||||
  ],
 | 
			
		||||
  "_resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.0.0.tgz",
 | 
			
		||||
  "_shasum": "70c8b698c9baa02965c07da5f0b185ca56f0a955",
 | 
			
		||||
  "_spec": "@actions/exec@^1.0.0",
 | 
			
		||||
  "_where": "C:\\Users\\damccorm\\Documents\\setup-python\\node_modules\\@actions\\tool-cache",
 | 
			
		||||
  "bugs": {
 | 
			
		||||
    "url": "https://github.com/actions/toolkit/issues"
 | 
			
		||||
  },
 | 
			
		||||
  "bundleDependencies": false,
 | 
			
		||||
  "deprecated": false,
 | 
			
		||||
  "description": "Actions exec lib",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@actions/io": "^1.0.0"
 | 
			
		||||
  },
 | 
			
		||||
  "directories": {
 | 
			
		||||
    "lib": "lib",
 | 
			
		||||
    "test": "__tests__"
 | 
			
		||||
  },
 | 
			
		||||
  "files": [
 | 
			
		||||
    "lib"
 | 
			
		||||
  ],
 | 
			
		||||
  "gitHead": "a40bce7c8d382aa3dbadaa327acbc696e9390e55",
 | 
			
		||||
  "homepage": "https://github.com/actions/toolkit/tree/master/packages/exec",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "exec",
 | 
			
		||||
    "actions"
 | 
			
		||||
  ],
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "main": "lib/exec.js",
 | 
			
		||||
  "name": "@actions/exec",
 | 
			
		||||
  "publishConfig": {
 | 
			
		||||
    "access": "public"
 | 
			
		||||
  },
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git+https://github.com/actions/toolkit.git"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: run tests from root\" && exit 1",
 | 
			
		||||
    "tsc": "tsc"
 | 
			
		||||
  },
 | 
			
		||||
  "version": "1.0.0"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										53
									
								
								node_modules/@actions/io/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										53
									
								
								node_modules/@actions/io/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,53 +0,0 @@
 | 
			
		||||
# `@actions/io`
 | 
			
		||||
 | 
			
		||||
> Core functions for cli filesystem scenarios
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
#### mkdir -p
 | 
			
		||||
 | 
			
		||||
Recursively make a directory. Follows rules specified in [man mkdir](https://linux.die.net/man/1/mkdir) with the `-p` option specified:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const io = require('@actions/io');
 | 
			
		||||
 | 
			
		||||
await io.mkdirP('path/to/make');
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### cp/mv
 | 
			
		||||
 | 
			
		||||
Copy or move files or folders. Follows rules specified in [man cp](https://linux.die.net/man/1/cp) and [man mv](https://linux.die.net/man/1/mv):
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const io = require('@actions/io');
 | 
			
		||||
 | 
			
		||||
// Recursive must be true for directories
 | 
			
		||||
const options = { recursive: true, force: false }
 | 
			
		||||
 | 
			
		||||
await io.cp('path/to/directory', 'path/to/dest', options);
 | 
			
		||||
await io.mv('path/to/file', 'path/to/dest');
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### rm -rf
 | 
			
		||||
 | 
			
		||||
Remove a file or folder recursively. Follows rules specified in [man rm](https://linux.die.net/man/1/rm) with the `-r` and `-f` rules specified.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const io = require('@actions/io');
 | 
			
		||||
 | 
			
		||||
await io.rmRF('path/to/directory');
 | 
			
		||||
await io.rmRF('path/to/file');
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### which
 | 
			
		||||
 | 
			
		||||
Get the path to a tool and resolves via paths. Follows the rules specified in [man which](https://linux.die.net/man/1/which).
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const exec = require('@actions/exec');
 | 
			
		||||
const io = require('@actions/io');
 | 
			
		||||
 | 
			
		||||
const pythonPath: string = await io.which('python', true)
 | 
			
		||||
 | 
			
		||||
await exec.exec(`"${pythonPath}"`, ['main.py']);
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										29
									
								
								node_modules/@actions/io/lib/io-util.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								node_modules/@actions/io/lib/io-util.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,29 +0,0 @@
 | 
			
		||||
/// <reference types="node" />
 | 
			
		||||
import * as fs from 'fs';
 | 
			
		||||
export declare const chmod: typeof fs.promises.chmod, copyFile: typeof fs.promises.copyFile, lstat: typeof fs.promises.lstat, mkdir: typeof fs.promises.mkdir, readdir: typeof fs.promises.readdir, readlink: typeof fs.promises.readlink, rename: typeof fs.promises.rename, rmdir: typeof fs.promises.rmdir, stat: typeof fs.promises.stat, symlink: typeof fs.promises.symlink, unlink: typeof fs.promises.unlink;
 | 
			
		||||
export declare const IS_WINDOWS: boolean;
 | 
			
		||||
export declare function exists(fsPath: string): Promise<boolean>;
 | 
			
		||||
export declare function isDirectory(fsPath: string, useStat?: boolean): Promise<boolean>;
 | 
			
		||||
/**
 | 
			
		||||
 * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like:
 | 
			
		||||
 * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases).
 | 
			
		||||
 */
 | 
			
		||||
export declare function isRooted(p: string): boolean;
 | 
			
		||||
/**
 | 
			
		||||
 * Recursively create a directory at `fsPath`.
 | 
			
		||||
 *
 | 
			
		||||
 * This implementation is optimistic, meaning it attempts to create the full
 | 
			
		||||
 * path first, and backs up the path stack from there.
 | 
			
		||||
 *
 | 
			
		||||
 * @param fsPath The path to create
 | 
			
		||||
 * @param maxDepth The maximum recursion depth
 | 
			
		||||
 * @param depth The current recursion depth
 | 
			
		||||
 */
 | 
			
		||||
export declare function mkdirP(fsPath: string, maxDepth?: number, depth?: number): Promise<void>;
 | 
			
		||||
/**
 | 
			
		||||
 * Best effort attempt to determine whether a file exists and is executable.
 | 
			
		||||
 * @param filePath    file path to check
 | 
			
		||||
 * @param extensions  additional file extensions to try
 | 
			
		||||
 * @return if file exists and is executable, returns the file path. otherwise empty string.
 | 
			
		||||
 */
 | 
			
		||||
export declare function tryGetExecutablePath(filePath: string, extensions: string[]): Promise<string>;
 | 
			
		||||
							
								
								
									
										194
									
								
								node_modules/@actions/io/lib/io-util.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										194
									
								
								node_modules/@actions/io/lib/io-util.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,194 +0,0 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | 
			
		||||
    return new (P || (P = Promise))(function (resolve, reject) {
 | 
			
		||||
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
 | 
			
		||||
        step((generator = generator.apply(thisArg, _arguments || [])).next());
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
var _a;
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
const assert_1 = require("assert");
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
_a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink;
 | 
			
		||||
exports.IS_WINDOWS = process.platform === 'win32';
 | 
			
		||||
function exists(fsPath) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        try {
 | 
			
		||||
            yield exports.stat(fsPath);
 | 
			
		||||
        }
 | 
			
		||||
        catch (err) {
 | 
			
		||||
            if (err.code === 'ENOENT') {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            throw err;
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.exists = exists;
 | 
			
		||||
function isDirectory(fsPath, useStat = false) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath);
 | 
			
		||||
        return stats.isDirectory();
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.isDirectory = isDirectory;
 | 
			
		||||
/**
 | 
			
		||||
 * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like:
 | 
			
		||||
 * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases).
 | 
			
		||||
 */
 | 
			
		||||
function isRooted(p) {
 | 
			
		||||
    p = normalizeSeparators(p);
 | 
			
		||||
    if (!p) {
 | 
			
		||||
        throw new Error('isRooted() parameter "p" cannot be empty');
 | 
			
		||||
    }
 | 
			
		||||
    if (exports.IS_WINDOWS) {
 | 
			
		||||
        return (p.startsWith('\\') || /^[A-Z]:/i.test(p) // e.g. \ or \hello or \\hello
 | 
			
		||||
        ); // e.g. C: or C:\hello
 | 
			
		||||
    }
 | 
			
		||||
    return p.startsWith('/');
 | 
			
		||||
}
 | 
			
		||||
exports.isRooted = isRooted;
 | 
			
		||||
/**
 | 
			
		||||
 * Recursively create a directory at `fsPath`.
 | 
			
		||||
 *
 | 
			
		||||
 * This implementation is optimistic, meaning it attempts to create the full
 | 
			
		||||
 * path first, and backs up the path stack from there.
 | 
			
		||||
 *
 | 
			
		||||
 * @param fsPath The path to create
 | 
			
		||||
 * @param maxDepth The maximum recursion depth
 | 
			
		||||
 * @param depth The current recursion depth
 | 
			
		||||
 */
 | 
			
		||||
function mkdirP(fsPath, maxDepth = 1000, depth = 1) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        assert_1.ok(fsPath, 'a path argument must be provided');
 | 
			
		||||
        fsPath = path.resolve(fsPath);
 | 
			
		||||
        if (depth >= maxDepth)
 | 
			
		||||
            return exports.mkdir(fsPath);
 | 
			
		||||
        try {
 | 
			
		||||
            yield exports.mkdir(fsPath);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        catch (err) {
 | 
			
		||||
            switch (err.code) {
 | 
			
		||||
                case 'ENOENT': {
 | 
			
		||||
                    yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1);
 | 
			
		||||
                    yield exports.mkdir(fsPath);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                default: {
 | 
			
		||||
                    let stats;
 | 
			
		||||
                    try {
 | 
			
		||||
                        stats = yield exports.stat(fsPath);
 | 
			
		||||
                    }
 | 
			
		||||
                    catch (err2) {
 | 
			
		||||
                        throw err;
 | 
			
		||||
                    }
 | 
			
		||||
                    if (!stats.isDirectory())
 | 
			
		||||
                        throw err;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.mkdirP = mkdirP;
 | 
			
		||||
/**
 | 
			
		||||
 * Best effort attempt to determine whether a file exists and is executable.
 | 
			
		||||
 * @param filePath    file path to check
 | 
			
		||||
 * @param extensions  additional file extensions to try
 | 
			
		||||
 * @return if file exists and is executable, returns the file path. otherwise empty string.
 | 
			
		||||
 */
 | 
			
		||||
function tryGetExecutablePath(filePath, extensions) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        let stats = undefined;
 | 
			
		||||
        try {
 | 
			
		||||
            // test file exists
 | 
			
		||||
            stats = yield exports.stat(filePath);
 | 
			
		||||
        }
 | 
			
		||||
        catch (err) {
 | 
			
		||||
            if (err.code !== 'ENOENT') {
 | 
			
		||||
                // eslint-disable-next-line no-console
 | 
			
		||||
                console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (stats && stats.isFile()) {
 | 
			
		||||
            if (exports.IS_WINDOWS) {
 | 
			
		||||
                // on Windows, test for valid extension
 | 
			
		||||
                const upperExt = path.extname(filePath).toUpperCase();
 | 
			
		||||
                if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) {
 | 
			
		||||
                    return filePath;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                if (isUnixExecutable(stats)) {
 | 
			
		||||
                    return filePath;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // try each extension
 | 
			
		||||
        const originalFilePath = filePath;
 | 
			
		||||
        for (const extension of extensions) {
 | 
			
		||||
            filePath = originalFilePath + extension;
 | 
			
		||||
            stats = undefined;
 | 
			
		||||
            try {
 | 
			
		||||
                stats = yield exports.stat(filePath);
 | 
			
		||||
            }
 | 
			
		||||
            catch (err) {
 | 
			
		||||
                if (err.code !== 'ENOENT') {
 | 
			
		||||
                    // eslint-disable-next-line no-console
 | 
			
		||||
                    console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (stats && stats.isFile()) {
 | 
			
		||||
                if (exports.IS_WINDOWS) {
 | 
			
		||||
                    // preserve the case of the actual file (since an extension was appended)
 | 
			
		||||
                    try {
 | 
			
		||||
                        const directory = path.dirname(filePath);
 | 
			
		||||
                        const upperName = path.basename(filePath).toUpperCase();
 | 
			
		||||
                        for (const actualName of yield exports.readdir(directory)) {
 | 
			
		||||
                            if (upperName === actualName.toUpperCase()) {
 | 
			
		||||
                                filePath = path.join(directory, actualName);
 | 
			
		||||
                                break;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    catch (err) {
 | 
			
		||||
                        // eslint-disable-next-line no-console
 | 
			
		||||
                        console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`);
 | 
			
		||||
                    }
 | 
			
		||||
                    return filePath;
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    if (isUnixExecutable(stats)) {
 | 
			
		||||
                        return filePath;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return '';
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.tryGetExecutablePath = tryGetExecutablePath;
 | 
			
		||||
function normalizeSeparators(p) {
 | 
			
		||||
    p = p || '';
 | 
			
		||||
    if (exports.IS_WINDOWS) {
 | 
			
		||||
        // convert slashes on Windows
 | 
			
		||||
        p = p.replace(/\//g, '\\');
 | 
			
		||||
        // remove redundant slashes
 | 
			
		||||
        return p.replace(/\\\\+/g, '\\');
 | 
			
		||||
    }
 | 
			
		||||
    // remove redundant slashes
 | 
			
		||||
    return p.replace(/\/\/+/g, '/');
 | 
			
		||||
}
 | 
			
		||||
// on Mac/Linux, test the execute bit
 | 
			
		||||
//     R   W  X  R  W X R W X
 | 
			
		||||
//   256 128 64 32 16 8 4 2 1
 | 
			
		||||
function isUnixExecutable(stats) {
 | 
			
		||||
    return ((stats.mode & 1) > 0 ||
 | 
			
		||||
        ((stats.mode & 8) > 0 && stats.gid === process.getgid()) ||
 | 
			
		||||
        ((stats.mode & 64) > 0 && stats.uid === process.getuid()));
 | 
			
		||||
}
 | 
			
		||||
//# sourceMappingURL=io-util.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/@actions/io/lib/io-util.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/@actions/io/lib/io-util.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
{"version":3,"file":"io-util.js","sourceRoot":"","sources":["../src/io-util.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,mCAAyB;AACzB,yBAAwB;AACxB,6BAA4B;AAEf,gBAYE,qTAAA;AAEF,QAAA,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;AAEtD,SAAsB,MAAM,CAAC,MAAc;;QACzC,IAAI;YACF,MAAM,YAAI,CAAC,MAAM,CAAC,CAAA;SACnB;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACzB,OAAO,KAAK,CAAA;aACb;YAED,MAAM,GAAG,CAAA;SACV;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CAAA;AAZD,wBAYC;AAED,SAAsB,WAAW,CAC/B,MAAc,EACd,UAAmB,KAAK;;QAExB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,YAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,aAAK,CAAC,MAAM,CAAC,CAAA;QAChE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAA;IAC5B,CAAC;CAAA;AAND,kCAMC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CAAC,CAAS;IAChC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;IAC1B,IAAI,CAAC,CAAC,EAAE;QACN,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;KAC5D;IAED,IAAI,kBAAU,EAAE;QACd,OAAO,CACL,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,8BAA8B;SACxE,CAAA,CAAC,sBAAsB;KACzB;IAED,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC;AAbD,4BAaC;AAED;;;;;;;;;GASG;AACH,SAAsB,MAAM,CAC1B,MAAc,EACd,WAAmB,IAAI,EACvB,QAAgB,CAAC;;QAEjB,WAAE,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAA;QAE9C,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAE7B,IAAI,KAAK,IAAI,QAAQ;YAAE,OAAO,aAAK,CAAC,MAAM,CAAC,CAAA;QAE3C,IAAI;YACF,MAAM,aAAK,CAAC,MAAM,CAAC,CAAA;YACnB,OAAM;SACP;QAAC,OAAO,GAAG,EAAE;YACZ,QAAQ,GAAG,CAAC,IAAI,EAAE;gBAChB,KAAK,QAAQ,CAAC,CAAC;oBACb,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;oBACvD,MAAM,aAAK,CAAC,MAAM,CAAC,CAAA;oBACnB,OAAM;iBACP;gBACD,OAAO,CAAC,CAAC;oBACP,IAAI,KAAe,CAAA;oBAEnB,IAAI;wBACF,KAAK,GAAG,MAAM,YAAI,CAAC,MAAM,CAAC,CAAA;qBAC3B;oBAAC,OAAO,IAAI,EAAE;wBACb,MAAM,GAAG,CAAA;qBACV;oBAED,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;wBAAE,MAAM,GAAG,CAAA;iBACpC;aACF;SACF;IACH,CAAC;CAAA;AAlCD,wBAkCC;AAED;;;;;GAKG;AACH,SAAsB,oBAAoB,CACxC,QAAgB,EAChB,UAAoB;;QAEpB,IAAI,KAAK,GAAyB,SAAS,CAAA;QAC3C,IAAI;YACF,mBAAmB;YACnB,KAAK,GAAG,MAAM,YAAI,CAAC,QAAQ,CAAC,CAAA;SAC7B;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACzB,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CACT,uEAAuE,QAAQ,MAAM,GAAG,EAAE,CAC3F,CAAA;aACF;SACF;QACD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;YAC3B,IAAI,kBAAU,EAAE;gBACd,uCAAuC;gBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;gBACrD,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,EAAE;oBACpE,OAAO,QAAQ,CAAA;iBAChB;aACF;iBAAM;gBACL,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;oBAC3B,OAAO,QAAQ,CAAA;iBAChB;aACF;SACF;QAED,qBAAqB;QACrB,MAAM,gBAAgB,GAAG,QAAQ,CAAA;QACjC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAClC,QAAQ,GAAG,gBAAgB,GAAG,SAAS,CAAA;YAEvC,KAAK,GAAG,SAAS,CAAA;YACjB,IAAI;gBACF,KAAK,GAAG,MAAM,YAAI,CAAC,QAAQ,CAAC,CAAA;aAC7B;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;oBACzB,sCAAsC;oBACtC,OAAO,CAAC,GAAG,CACT,uEAAuE,QAAQ,MAAM,GAAG,EAAE,CAC3F,CAAA;iBACF;aACF;YAED,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;gBAC3B,IAAI,kBAAU,EAAE;oBACd,yEAAyE;oBACzE,IAAI;wBACF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;wBACxC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;wBACvD,KAAK,MAAM,UAAU,IAAI,MAAM,eAAO,CAAC,SAAS,CAAC,EAAE;4BACjD,IAAI,SAAS,KAAK,UAAU,CAAC,WAAW,EAAE,EAAE;gCAC1C,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;gCAC3C,MAAK;6BACN;yBACF;qBACF;oBAAC,OAAO,GAAG,EAAE;wBACZ,sCAAsC;wBACtC,OAAO,CAAC,GAAG,CACT,yEAAyE,QAAQ,MAAM,GAAG,EAAE,CAC7F,CAAA;qBACF;oBAED,OAAO,QAAQ,CAAA;iBAChB;qBAAM;oBACL,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;wBAC3B,OAAO,QAAQ,CAAA;qBAChB;iBACF;aACF;SACF;QAED,OAAO,EAAE,CAAA;IACX,CAAC;CAAA;AA5ED,oDA4EC;AAED,SAAS,mBAAmB,CAAC,CAAS;IACpC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;IACX,IAAI,kBAAU,EAAE;QACd,6BAA6B;QAC7B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAE1B,2BAA2B;QAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;KACjC;IAED,2BAA2B;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;AACjC,CAAC;AAED,qCAAqC;AACrC,6BAA6B;AAC7B,6BAA6B;AAC7B,SAAS,gBAAgB,CAAC,KAAe;IACvC,OAAO,CACL,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;QACpB,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QACxD,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAC1D,CAAA;AACH,CAAC"}
 | 
			
		||||
							
								
								
									
										56
									
								
								node_modules/@actions/io/lib/io.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										56
									
								
								node_modules/@actions/io/lib/io.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,56 +0,0 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Interface for cp/mv options
 | 
			
		||||
 */
 | 
			
		||||
export interface CopyOptions {
 | 
			
		||||
    /** Optional. Whether to recursively copy all subdirectories. Defaults to false */
 | 
			
		||||
    recursive?: boolean;
 | 
			
		||||
    /** Optional. Whether to overwrite existing files in the destination. Defaults to true */
 | 
			
		||||
    force?: boolean;
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * Interface for cp/mv options
 | 
			
		||||
 */
 | 
			
		||||
export interface MoveOptions {
 | 
			
		||||
    /** Optional. Whether to overwrite existing files in the destination. Defaults to true */
 | 
			
		||||
    force?: boolean;
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * Copies a file or folder.
 | 
			
		||||
 * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js
 | 
			
		||||
 *
 | 
			
		||||
 * @param     source    source path
 | 
			
		||||
 * @param     dest      destination path
 | 
			
		||||
 * @param     options   optional. See CopyOptions.
 | 
			
		||||
 */
 | 
			
		||||
export declare function cp(source: string, dest: string, options?: CopyOptions): Promise<void>;
 | 
			
		||||
/**
 | 
			
		||||
 * Moves a path.
 | 
			
		||||
 *
 | 
			
		||||
 * @param     source    source path
 | 
			
		||||
 * @param     dest      destination path
 | 
			
		||||
 * @param     options   optional. See MoveOptions.
 | 
			
		||||
 */
 | 
			
		||||
export declare function mv(source: string, dest: string, options?: MoveOptions): Promise<void>;
 | 
			
		||||
/**
 | 
			
		||||
 * Remove a path recursively with force
 | 
			
		||||
 *
 | 
			
		||||
 * @param inputPath path to remove
 | 
			
		||||
 */
 | 
			
		||||
export declare function rmRF(inputPath: string): Promise<void>;
 | 
			
		||||
/**
 | 
			
		||||
 * Make a directory.  Creates the full path with folders in between
 | 
			
		||||
 * Will throw if it fails
 | 
			
		||||
 *
 | 
			
		||||
 * @param   fsPath        path to create
 | 
			
		||||
 * @returns Promise<void>
 | 
			
		||||
 */
 | 
			
		||||
export declare function mkdirP(fsPath: string): Promise<void>;
 | 
			
		||||
/**
 | 
			
		||||
 * Returns path of a tool had the tool actually been invoked.  Resolves via paths.
 | 
			
		||||
 * If you check and the tool does not exist, it will throw.
 | 
			
		||||
 *
 | 
			
		||||
 * @param     tool              name of the tool
 | 
			
		||||
 * @param     check             whether to check if tool exists
 | 
			
		||||
 * @returns   Promise<string>   path to tool
 | 
			
		||||
 */
 | 
			
		||||
export declare function which(tool: string, check?: boolean): Promise<string>;
 | 
			
		||||
							
								
								
									
										289
									
								
								node_modules/@actions/io/lib/io.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										289
									
								
								node_modules/@actions/io/lib/io.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,289 +0,0 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | 
			
		||||
    return new (P || (P = Promise))(function (resolve, reject) {
 | 
			
		||||
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
 | 
			
		||||
        step((generator = generator.apply(thisArg, _arguments || [])).next());
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
const childProcess = require("child_process");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const util_1 = require("util");
 | 
			
		||||
const ioUtil = require("./io-util");
 | 
			
		||||
const exec = util_1.promisify(childProcess.exec);
 | 
			
		||||
/**
 | 
			
		||||
 * Copies a file or folder.
 | 
			
		||||
 * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js
 | 
			
		||||
 *
 | 
			
		||||
 * @param     source    source path
 | 
			
		||||
 * @param     dest      destination path
 | 
			
		||||
 * @param     options   optional. See CopyOptions.
 | 
			
		||||
 */
 | 
			
		||||
function cp(source, dest, options = {}) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        const { force, recursive } = readCopyOptions(options);
 | 
			
		||||
        const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null;
 | 
			
		||||
        // Dest is an existing file, but not forcing
 | 
			
		||||
        if (destStat && destStat.isFile() && !force) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        // If dest is an existing directory, should copy inside.
 | 
			
		||||
        const newDest = destStat && destStat.isDirectory()
 | 
			
		||||
            ? path.join(dest, path.basename(source))
 | 
			
		||||
            : dest;
 | 
			
		||||
        if (!(yield ioUtil.exists(source))) {
 | 
			
		||||
            throw new Error(`no such file or directory: ${source}`);
 | 
			
		||||
        }
 | 
			
		||||
        const sourceStat = yield ioUtil.stat(source);
 | 
			
		||||
        if (sourceStat.isDirectory()) {
 | 
			
		||||
            if (!recursive) {
 | 
			
		||||
                throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                yield cpDirRecursive(source, newDest, 0, force);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            if (path.relative(source, newDest) === '') {
 | 
			
		||||
                // a file cannot be copied to itself
 | 
			
		||||
                throw new Error(`'${newDest}' and '${source}' are the same file`);
 | 
			
		||||
            }
 | 
			
		||||
            yield copyFile(source, newDest, force);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.cp = cp;
 | 
			
		||||
/**
 | 
			
		||||
 * Moves a path.
 | 
			
		||||
 *
 | 
			
		||||
 * @param     source    source path
 | 
			
		||||
 * @param     dest      destination path
 | 
			
		||||
 * @param     options   optional. See MoveOptions.
 | 
			
		||||
 */
 | 
			
		||||
function mv(source, dest, options = {}) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        if (yield ioUtil.exists(dest)) {
 | 
			
		||||
            let destExists = true;
 | 
			
		||||
            if (yield ioUtil.isDirectory(dest)) {
 | 
			
		||||
                // If dest is directory copy src into dest
 | 
			
		||||
                dest = path.join(dest, path.basename(source));
 | 
			
		||||
                destExists = yield ioUtil.exists(dest);
 | 
			
		||||
            }
 | 
			
		||||
            if (destExists) {
 | 
			
		||||
                if (options.force == null || options.force) {
 | 
			
		||||
                    yield rmRF(dest);
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    throw new Error('Destination already exists');
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        yield mkdirP(path.dirname(dest));
 | 
			
		||||
        yield ioUtil.rename(source, dest);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.mv = mv;
 | 
			
		||||
/**
 | 
			
		||||
 * Remove a path recursively with force
 | 
			
		||||
 *
 | 
			
		||||
 * @param inputPath path to remove
 | 
			
		||||
 */
 | 
			
		||||
function rmRF(inputPath) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        if (ioUtil.IS_WINDOWS) {
 | 
			
		||||
            // Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another
 | 
			
		||||
            // program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del.
 | 
			
		||||
            try {
 | 
			
		||||
                if (yield ioUtil.isDirectory(inputPath, true)) {
 | 
			
		||||
                    yield exec(`rd /s /q "${inputPath}"`);
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    yield exec(`del /f /a "${inputPath}"`);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (err) {
 | 
			
		||||
                // if you try to delete a file that doesn't exist, desired result is achieved
 | 
			
		||||
                // other errors are valid
 | 
			
		||||
                if (err.code !== 'ENOENT')
 | 
			
		||||
                    throw err;
 | 
			
		||||
            }
 | 
			
		||||
            // Shelling out fails to remove a symlink folder with missing source, this unlink catches that
 | 
			
		||||
            try {
 | 
			
		||||
                yield ioUtil.unlink(inputPath);
 | 
			
		||||
            }
 | 
			
		||||
            catch (err) {
 | 
			
		||||
                // if you try to delete a file that doesn't exist, desired result is achieved
 | 
			
		||||
                // other errors are valid
 | 
			
		||||
                if (err.code !== 'ENOENT')
 | 
			
		||||
                    throw err;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            let isDir = false;
 | 
			
		||||
            try {
 | 
			
		||||
                isDir = yield ioUtil.isDirectory(inputPath);
 | 
			
		||||
            }
 | 
			
		||||
            catch (err) {
 | 
			
		||||
                // if you try to delete a file that doesn't exist, desired result is achieved
 | 
			
		||||
                // other errors are valid
 | 
			
		||||
                if (err.code !== 'ENOENT')
 | 
			
		||||
                    throw err;
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (isDir) {
 | 
			
		||||
                yield exec(`rm -rf "${inputPath}"`);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                yield ioUtil.unlink(inputPath);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.rmRF = rmRF;
 | 
			
		||||
/**
 | 
			
		||||
 * Make a directory.  Creates the full path with folders in between
 | 
			
		||||
 * Will throw if it fails
 | 
			
		||||
 *
 | 
			
		||||
 * @param   fsPath        path to create
 | 
			
		||||
 * @returns Promise<void>
 | 
			
		||||
 */
 | 
			
		||||
function mkdirP(fsPath) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        yield ioUtil.mkdirP(fsPath);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.mkdirP = mkdirP;
 | 
			
		||||
/**
 | 
			
		||||
 * Returns path of a tool had the tool actually been invoked.  Resolves via paths.
 | 
			
		||||
 * If you check and the tool does not exist, it will throw.
 | 
			
		||||
 *
 | 
			
		||||
 * @param     tool              name of the tool
 | 
			
		||||
 * @param     check             whether to check if tool exists
 | 
			
		||||
 * @returns   Promise<string>   path to tool
 | 
			
		||||
 */
 | 
			
		||||
function which(tool, check) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        if (!tool) {
 | 
			
		||||
            throw new Error("parameter 'tool' is required");
 | 
			
		||||
        }
 | 
			
		||||
        // recursive when check=true
 | 
			
		||||
        if (check) {
 | 
			
		||||
            const result = yield which(tool, false);
 | 
			
		||||
            if (!result) {
 | 
			
		||||
                if (ioUtil.IS_WINDOWS) {
 | 
			
		||||
                    throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`);
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        try {
 | 
			
		||||
            // build the list of extensions to try
 | 
			
		||||
            const extensions = [];
 | 
			
		||||
            if (ioUtil.IS_WINDOWS && process.env.PATHEXT) {
 | 
			
		||||
                for (const extension of process.env.PATHEXT.split(path.delimiter)) {
 | 
			
		||||
                    if (extension) {
 | 
			
		||||
                        extensions.push(extension);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // if it's rooted, return it if exists. otherwise return empty.
 | 
			
		||||
            if (ioUtil.isRooted(tool)) {
 | 
			
		||||
                const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions);
 | 
			
		||||
                if (filePath) {
 | 
			
		||||
                    return filePath;
 | 
			
		||||
                }
 | 
			
		||||
                return '';
 | 
			
		||||
            }
 | 
			
		||||
            // if any path separators, return empty
 | 
			
		||||
            if (tool.includes('/') || (ioUtil.IS_WINDOWS && tool.includes('\\'))) {
 | 
			
		||||
                return '';
 | 
			
		||||
            }
 | 
			
		||||
            // build the list of directories
 | 
			
		||||
            //
 | 
			
		||||
            // Note, technically "where" checks the current directory on Windows. From a task lib perspective,
 | 
			
		||||
            // it feels like we should not do this. Checking the current directory seems like more of a use
 | 
			
		||||
            // case of a shell, and the which() function exposed by the task lib should strive for consistency
 | 
			
		||||
            // across platforms.
 | 
			
		||||
            const directories = [];
 | 
			
		||||
            if (process.env.PATH) {
 | 
			
		||||
                for (const p of process.env.PATH.split(path.delimiter)) {
 | 
			
		||||
                    if (p) {
 | 
			
		||||
                        directories.push(p);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // return the first match
 | 
			
		||||
            for (const directory of directories) {
 | 
			
		||||
                const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions);
 | 
			
		||||
                if (filePath) {
 | 
			
		||||
                    return filePath;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return '';
 | 
			
		||||
        }
 | 
			
		||||
        catch (err) {
 | 
			
		||||
            throw new Error(`which failed with message ${err.message}`);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.which = which;
 | 
			
		||||
function readCopyOptions(options) {
 | 
			
		||||
    const force = options.force == null ? true : options.force;
 | 
			
		||||
    const recursive = Boolean(options.recursive);
 | 
			
		||||
    return { force, recursive };
 | 
			
		||||
}
 | 
			
		||||
function cpDirRecursive(sourceDir, destDir, currentDepth, force) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        // Ensure there is not a run away recursive copy
 | 
			
		||||
        if (currentDepth >= 255)
 | 
			
		||||
            return;
 | 
			
		||||
        currentDepth++;
 | 
			
		||||
        yield mkdirP(destDir);
 | 
			
		||||
        const files = yield ioUtil.readdir(sourceDir);
 | 
			
		||||
        for (const fileName of files) {
 | 
			
		||||
            const srcFile = `${sourceDir}/${fileName}`;
 | 
			
		||||
            const destFile = `${destDir}/${fileName}`;
 | 
			
		||||
            const srcFileStat = yield ioUtil.lstat(srcFile);
 | 
			
		||||
            if (srcFileStat.isDirectory()) {
 | 
			
		||||
                // Recurse
 | 
			
		||||
                yield cpDirRecursive(srcFile, destFile, currentDepth, force);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                yield copyFile(srcFile, destFile, force);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // Change the mode for the newly created directory
 | 
			
		||||
        yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
// Buffered file copy
 | 
			
		||||
function copyFile(srcFile, destFile, force) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) {
 | 
			
		||||
            // unlink/re-link it
 | 
			
		||||
            try {
 | 
			
		||||
                yield ioUtil.lstat(destFile);
 | 
			
		||||
                yield ioUtil.unlink(destFile);
 | 
			
		||||
            }
 | 
			
		||||
            catch (e) {
 | 
			
		||||
                // Try to override file permission
 | 
			
		||||
                if (e.code === 'EPERM') {
 | 
			
		||||
                    yield ioUtil.chmod(destFile, '0666');
 | 
			
		||||
                    yield ioUtil.unlink(destFile);
 | 
			
		||||
                }
 | 
			
		||||
                // other errors = it doesn't exist, no work to do
 | 
			
		||||
            }
 | 
			
		||||
            // Copy over symlink
 | 
			
		||||
            const symlinkFull = yield ioUtil.readlink(srcFile);
 | 
			
		||||
            yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null);
 | 
			
		||||
        }
 | 
			
		||||
        else if (!(yield ioUtil.exists(destFile)) || force) {
 | 
			
		||||
            yield ioUtil.copyFile(srcFile, destFile);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
//# sourceMappingURL=io.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/@actions/io/lib/io.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/@actions/io/lib/io.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										61
									
								
								node_modules/@actions/io/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										61
									
								
								node_modules/@actions/io/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,61 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "_from": "@actions/io@^1.0.0",
 | 
			
		||||
  "_id": "@actions/io@1.0.0",
 | 
			
		||||
  "_inBundle": false,
 | 
			
		||||
  "_integrity": "sha512-ezrJSRdqtXtdx1WXlfYL85+40F7gB39jCK9P0jZVODW3W6xUYmu6ZOEc/UmmElUwhRyDRm1R4yNZu1Joq2kuQg==",
 | 
			
		||||
  "_location": "/@actions/io",
 | 
			
		||||
  "_phantomChildren": {},
 | 
			
		||||
  "_requested": {
 | 
			
		||||
    "type": "range",
 | 
			
		||||
    "registry": true,
 | 
			
		||||
    "raw": "@actions/io@^1.0.0",
 | 
			
		||||
    "name": "@actions/io",
 | 
			
		||||
    "escapedName": "@actions%2fio",
 | 
			
		||||
    "scope": "@actions",
 | 
			
		||||
    "rawSpec": "^1.0.0",
 | 
			
		||||
    "saveSpec": null,
 | 
			
		||||
    "fetchSpec": "^1.0.0"
 | 
			
		||||
  },
 | 
			
		||||
  "_requiredBy": [
 | 
			
		||||
    "#DEV:/",
 | 
			
		||||
    "/@actions/tool-cache"
 | 
			
		||||
  ],
 | 
			
		||||
  "_resolved": "https://registry.npmjs.org/@actions/io/-/io-1.0.0.tgz",
 | 
			
		||||
  "_shasum": "379454174660623bb5b3bce0be8b9e2285a62bcb",
 | 
			
		||||
  "_spec": "@actions/io@^1.0.0",
 | 
			
		||||
  "_where": "C:\\Users\\damccorm\\Documents\\setup-python\\node_modules\\@actions\\tool-cache",
 | 
			
		||||
  "bugs": {
 | 
			
		||||
    "url": "https://github.com/actions/toolkit/issues"
 | 
			
		||||
  },
 | 
			
		||||
  "bundleDependencies": false,
 | 
			
		||||
  "deprecated": false,
 | 
			
		||||
  "description": "Actions io lib",
 | 
			
		||||
  "directories": {
 | 
			
		||||
    "lib": "lib",
 | 
			
		||||
    "test": "__tests__"
 | 
			
		||||
  },
 | 
			
		||||
  "files": [
 | 
			
		||||
    "lib"
 | 
			
		||||
  ],
 | 
			
		||||
  "gitHead": "a40bce7c8d382aa3dbadaa327acbc696e9390e55",
 | 
			
		||||
  "homepage": "https://github.com/actions/toolkit/tree/master/packages/io",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "io",
 | 
			
		||||
    "actions"
 | 
			
		||||
  ],
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "main": "lib/io.js",
 | 
			
		||||
  "name": "@actions/io",
 | 
			
		||||
  "publishConfig": {
 | 
			
		||||
    "access": "public"
 | 
			
		||||
  },
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git+https://github.com/actions/toolkit.git"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: run tests from root\" && exit 1",
 | 
			
		||||
    "tsc": "tsc"
 | 
			
		||||
  },
 | 
			
		||||
  "version": "1.0.0"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										82
									
								
								node_modules/@actions/tool-cache/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										82
									
								
								node_modules/@actions/tool-cache/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,82 +0,0 @@
 | 
			
		||||
# `@actions/tool-cache`
 | 
			
		||||
 | 
			
		||||
> Functions necessary for downloading and caching tools.
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
#### Download
 | 
			
		||||
 | 
			
		||||
You can use this to download tools (or other files) from a download URL:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const tc = require('@actions/tool-cache');
 | 
			
		||||
 | 
			
		||||
const node12Path = await tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Extract
 | 
			
		||||
 | 
			
		||||
These can then be extracted in platform specific ways:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const tc = require('@actions/tool-cache');
 | 
			
		||||
 | 
			
		||||
if (process.platform === 'win32') {
 | 
			
		||||
  tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.zip');
 | 
			
		||||
  const node12ExtractedFolder = await tc.extractZip(node12Path, 'path/to/extract/to');
 | 
			
		||||
  
 | 
			
		||||
  // Or alternately
 | 
			
		||||
  tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.7z');
 | 
			
		||||
  const node12ExtractedFolder = await tc.extract7z(node12Path, 'path/to/extract/to');
 | 
			
		||||
}
 | 
			
		||||
else {
 | 
			
		||||
  const node12Path = await tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
 | 
			
		||||
  const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Cache
 | 
			
		||||
 | 
			
		||||
Finally, you can cache these directories in our tool-cache. This is useful if you want to switch back and forth between versions of a tool, or save a tool between runs for private runners (private runners are still in development but are on the roadmap).
 | 
			
		||||
 | 
			
		||||
You'll often want to add it to the path as part of this step:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const tc = require('@actions/tool-cache');
 | 
			
		||||
const core = require('@actions/core');
 | 
			
		||||
 | 
			
		||||
const node12Path = await tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
 | 
			
		||||
const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');
 | 
			
		||||
 | 
			
		||||
const cachedPath = await tc.cacheDir(node12ExtractedFolder, 'node', '12.7.0');
 | 
			
		||||
core.addPath(cachedPath);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can also cache files for reuse.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const tc = require('@actions/tool-cache');
 | 
			
		||||
 | 
			
		||||
tc.cacheFile('path/to/exe', 'destFileName.exe', 'myExeName', '1.1.0');
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Find
 | 
			
		||||
 | 
			
		||||
Finally, you can find directories and files you've previously cached:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const tc = require('@actions/tool-cache');
 | 
			
		||||
const core = require('@actions/core');
 | 
			
		||||
 | 
			
		||||
const nodeDirectory = tc.find('node', '12.x', 'x64');
 | 
			
		||||
core.addPath(nodeDirectory);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can even find all cached versions of a tool:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const tc = require('@actions/tool-cache');
 | 
			
		||||
 | 
			
		||||
const allNodeVersions = tc.findAllVersions('node');
 | 
			
		||||
console.log(`Versions of node available: ${allNodeVersions}`);
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										78
									
								
								node_modules/@actions/tool-cache/lib/tool-cache.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										78
									
								
								node_modules/@actions/tool-cache/lib/tool-cache.d.ts
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,78 +0,0 @@
 | 
			
		||||
export declare class HTTPError extends Error {
 | 
			
		||||
    readonly httpStatusCode: number | undefined;
 | 
			
		||||
    constructor(httpStatusCode: number | undefined);
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * Download a tool from an url and stream it into a file
 | 
			
		||||
 *
 | 
			
		||||
 * @param url       url of tool to download
 | 
			
		||||
 * @returns         path to downloaded tool
 | 
			
		||||
 */
 | 
			
		||||
export declare function downloadTool(url: string): Promise<string>;
 | 
			
		||||
/**
 | 
			
		||||
 * Extract a .7z file
 | 
			
		||||
 *
 | 
			
		||||
 * @param file     path to the .7z file
 | 
			
		||||
 * @param dest     destination directory. Optional.
 | 
			
		||||
 * @param _7zPath  path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this
 | 
			
		||||
 * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will
 | 
			
		||||
 * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is
 | 
			
		||||
 * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line
 | 
			
		||||
 * interface, it is smaller than the full command line interface, and it does support long paths. At the
 | 
			
		||||
 * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website.
 | 
			
		||||
 * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path
 | 
			
		||||
 * to 7zr.exe can be pass to this function.
 | 
			
		||||
 * @returns        path to the destination directory
 | 
			
		||||
 */
 | 
			
		||||
export declare function extract7z(file: string, dest?: string, _7zPath?: string): Promise<string>;
 | 
			
		||||
/**
 | 
			
		||||
 * Extract a tar
 | 
			
		||||
 *
 | 
			
		||||
 * @param file     path to the tar
 | 
			
		||||
 * @param dest     destination directory. Optional.
 | 
			
		||||
 * @returns        path to the destination directory
 | 
			
		||||
 */
 | 
			
		||||
export declare function extractTar(file: string, dest?: string): Promise<string>;
 | 
			
		||||
/**
 | 
			
		||||
 * Extract a zip
 | 
			
		||||
 *
 | 
			
		||||
 * @param file     path to the zip
 | 
			
		||||
 * @param dest     destination directory. Optional.
 | 
			
		||||
 * @returns        path to the destination directory
 | 
			
		||||
 */
 | 
			
		||||
export declare function extractZip(file: string, dest?: string): Promise<string>;
 | 
			
		||||
/**
 | 
			
		||||
 * Caches a directory and installs it into the tool cacheDir
 | 
			
		||||
 *
 | 
			
		||||
 * @param sourceDir    the directory to cache into tools
 | 
			
		||||
 * @param tool          tool name
 | 
			
		||||
 * @param version       version of the tool.  semver format
 | 
			
		||||
 * @param arch          architecture of the tool.  Optional.  Defaults to machine architecture
 | 
			
		||||
 */
 | 
			
		||||
export declare function cacheDir(sourceDir: string, tool: string, version: string, arch?: string): Promise<string>;
 | 
			
		||||
/**
 | 
			
		||||
 * Caches a downloaded file (GUID) and installs it
 | 
			
		||||
 * into the tool cache with a given targetName
 | 
			
		||||
 *
 | 
			
		||||
 * @param sourceFile    the file to cache into tools.  Typically a result of downloadTool which is a guid.
 | 
			
		||||
 * @param targetFile    the name of the file name in the tools directory
 | 
			
		||||
 * @param tool          tool name
 | 
			
		||||
 * @param version       version of the tool.  semver format
 | 
			
		||||
 * @param arch          architecture of the tool.  Optional.  Defaults to machine architecture
 | 
			
		||||
 */
 | 
			
		||||
export declare function cacheFile(sourceFile: string, targetFile: string, tool: string, version: string, arch?: string): Promise<string>;
 | 
			
		||||
/**
 | 
			
		||||
 * Finds the path to a tool version in the local installed tool cache
 | 
			
		||||
 *
 | 
			
		||||
 * @param toolName      name of the tool
 | 
			
		||||
 * @param versionSpec   version of the tool
 | 
			
		||||
 * @param arch          optional arch.  defaults to arch of computer
 | 
			
		||||
 */
 | 
			
		||||
export declare function find(toolName: string, versionSpec: string, arch?: string): string;
 | 
			
		||||
/**
 | 
			
		||||
 * Finds the paths to all versions of a tool that are installed in the local tool cache
 | 
			
		||||
 *
 | 
			
		||||
 * @param toolName  name of the tool
 | 
			
		||||
 * @param arch      optional arch.  defaults to arch of computer
 | 
			
		||||
 */
 | 
			
		||||
export declare function findAllVersions(toolName: string, arch?: string): string[];
 | 
			
		||||
							
								
								
									
										436
									
								
								node_modules/@actions/tool-cache/lib/tool-cache.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										436
									
								
								node_modules/@actions/tool-cache/lib/tool-cache.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,436 +0,0 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | 
			
		||||
    return new (P || (P = Promise))(function (resolve, reject) {
 | 
			
		||||
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | 
			
		||||
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
 | 
			
		||||
        step((generator = generator.apply(thisArg, _arguments || [])).next());
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
const core = require("@actions/core");
 | 
			
		||||
const io = require("@actions/io");
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
const os = require("os");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const httpm = require("typed-rest-client/HttpClient");
 | 
			
		||||
const semver = require("semver");
 | 
			
		||||
const uuidV4 = require("uuid/v4");
 | 
			
		||||
const exec_1 = require("@actions/exec/lib/exec");
 | 
			
		||||
const assert_1 = require("assert");
 | 
			
		||||
class HTTPError extends Error {
 | 
			
		||||
    constructor(httpStatusCode) {
 | 
			
		||||
        super(`Unexpected HTTP response: ${httpStatusCode}`);
 | 
			
		||||
        this.httpStatusCode = httpStatusCode;
 | 
			
		||||
        Object.setPrototypeOf(this, new.target.prototype);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
exports.HTTPError = HTTPError;
 | 
			
		||||
const IS_WINDOWS = process.platform === 'win32';
 | 
			
		||||
const userAgent = 'actions/tool-cache';
 | 
			
		||||
// On load grab temp directory and cache directory and remove them from env (currently don't want to expose this)
 | 
			
		||||
let tempDirectory = process.env['RUNNER_TEMP'] || '';
 | 
			
		||||
let cacheRoot = process.env['RUNNER_TOOL_CACHE'] || '';
 | 
			
		||||
// If directories not found, place them in common temp locations
 | 
			
		||||
if (!tempDirectory || !cacheRoot) {
 | 
			
		||||
    let baseLocation;
 | 
			
		||||
    if (IS_WINDOWS) {
 | 
			
		||||
        // On windows use the USERPROFILE env variable
 | 
			
		||||
        baseLocation = process.env['USERPROFILE'] || 'C:\\';
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        if (process.platform === 'darwin') {
 | 
			
		||||
            baseLocation = '/Users';
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            baseLocation = '/home';
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (!tempDirectory) {
 | 
			
		||||
        tempDirectory = path.join(baseLocation, 'actions', 'temp');
 | 
			
		||||
    }
 | 
			
		||||
    if (!cacheRoot) {
 | 
			
		||||
        cacheRoot = path.join(baseLocation, 'actions', 'cache');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * Download a tool from an url and stream it into a file
 | 
			
		||||
 *
 | 
			
		||||
 * @param url       url of tool to download
 | 
			
		||||
 * @returns         path to downloaded tool
 | 
			
		||||
 */
 | 
			
		||||
function downloadTool(url) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        // Wrap in a promise so that we can resolve from within stream callbacks
 | 
			
		||||
        return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
            try {
 | 
			
		||||
                const http = new httpm.HttpClient(userAgent, [], {
 | 
			
		||||
                    allowRetries: true,
 | 
			
		||||
                    maxRetries: 3
 | 
			
		||||
                });
 | 
			
		||||
                const destPath = path.join(tempDirectory, uuidV4());
 | 
			
		||||
                yield io.mkdirP(tempDirectory);
 | 
			
		||||
                core.debug(`Downloading ${url}`);
 | 
			
		||||
                core.debug(`Downloading ${destPath}`);
 | 
			
		||||
                if (fs.existsSync(destPath)) {
 | 
			
		||||
                    throw new Error(`Destination file path ${destPath} already exists`);
 | 
			
		||||
                }
 | 
			
		||||
                const response = yield http.get(url);
 | 
			
		||||
                if (response.message.statusCode !== 200) {
 | 
			
		||||
                    const err = new HTTPError(response.message.statusCode);
 | 
			
		||||
                    core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`);
 | 
			
		||||
                    throw err;
 | 
			
		||||
                }
 | 
			
		||||
                const file = fs.createWriteStream(destPath);
 | 
			
		||||
                file.on('open', () => __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
                    try {
 | 
			
		||||
                        const stream = response.message.pipe(file);
 | 
			
		||||
                        stream.on('close', () => {
 | 
			
		||||
                            core.debug('download complete');
 | 
			
		||||
                            resolve(destPath);
 | 
			
		||||
                        });
 | 
			
		||||
                    }
 | 
			
		||||
                    catch (err) {
 | 
			
		||||
                        core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`);
 | 
			
		||||
                        reject(err);
 | 
			
		||||
                    }
 | 
			
		||||
                }));
 | 
			
		||||
                file.on('error', err => {
 | 
			
		||||
                    file.end();
 | 
			
		||||
                    reject(err);
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
            catch (err) {
 | 
			
		||||
                reject(err);
 | 
			
		||||
            }
 | 
			
		||||
        }));
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.downloadTool = downloadTool;
 | 
			
		||||
/**
 | 
			
		||||
 * Extract a .7z file
 | 
			
		||||
 *
 | 
			
		||||
 * @param file     path to the .7z file
 | 
			
		||||
 * @param dest     destination directory. Optional.
 | 
			
		||||
 * @param _7zPath  path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this
 | 
			
		||||
 * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will
 | 
			
		||||
 * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is
 | 
			
		||||
 * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line
 | 
			
		||||
 * interface, it is smaller than the full command line interface, and it does support long paths. At the
 | 
			
		||||
 * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website.
 | 
			
		||||
 * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path
 | 
			
		||||
 * to 7zr.exe can be pass to this function.
 | 
			
		||||
 * @returns        path to the destination directory
 | 
			
		||||
 */
 | 
			
		||||
function extract7z(file, dest, _7zPath) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS');
 | 
			
		||||
        assert_1.ok(file, 'parameter "file" is required');
 | 
			
		||||
        dest = dest || (yield _createExtractFolder(dest));
 | 
			
		||||
        const originalCwd = process.cwd();
 | 
			
		||||
        process.chdir(dest);
 | 
			
		||||
        if (_7zPath) {
 | 
			
		||||
            try {
 | 
			
		||||
                const args = [
 | 
			
		||||
                    'x',
 | 
			
		||||
                    '-bb1',
 | 
			
		||||
                    '-bd',
 | 
			
		||||
                    '-sccUTF-8',
 | 
			
		||||
                    file
 | 
			
		||||
                ];
 | 
			
		||||
                const options = {
 | 
			
		||||
                    silent: true
 | 
			
		||||
                };
 | 
			
		||||
                yield exec_1.exec(`"${_7zPath}"`, args, options);
 | 
			
		||||
            }
 | 
			
		||||
            finally {
 | 
			
		||||
                process.chdir(originalCwd);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            const escapedScript = path
 | 
			
		||||
                .join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1')
 | 
			
		||||
                .replace(/'/g, "''")
 | 
			
		||||
                .replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
 | 
			
		||||
            const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, '');
 | 
			
		||||
            const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, '');
 | 
			
		||||
            const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`;
 | 
			
		||||
            const args = [
 | 
			
		||||
                '-NoLogo',
 | 
			
		||||
                '-Sta',
 | 
			
		||||
                '-NoProfile',
 | 
			
		||||
                '-NonInteractive',
 | 
			
		||||
                '-ExecutionPolicy',
 | 
			
		||||
                'Unrestricted',
 | 
			
		||||
                '-Command',
 | 
			
		||||
                command
 | 
			
		||||
            ];
 | 
			
		||||
            const options = {
 | 
			
		||||
                silent: true
 | 
			
		||||
            };
 | 
			
		||||
            try {
 | 
			
		||||
                const powershellPath = yield io.which('powershell', true);
 | 
			
		||||
                yield exec_1.exec(`"${powershellPath}"`, args, options);
 | 
			
		||||
            }
 | 
			
		||||
            finally {
 | 
			
		||||
                process.chdir(originalCwd);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return dest;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.extract7z = extract7z;
 | 
			
		||||
/**
 | 
			
		||||
 * Extract a tar
 | 
			
		||||
 *
 | 
			
		||||
 * @param file     path to the tar
 | 
			
		||||
 * @param dest     destination directory. Optional.
 | 
			
		||||
 * @returns        path to the destination directory
 | 
			
		||||
 */
 | 
			
		||||
function extractTar(file, dest) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        if (!file) {
 | 
			
		||||
            throw new Error("parameter 'file' is required");
 | 
			
		||||
        }
 | 
			
		||||
        dest = dest || (yield _createExtractFolder(dest));
 | 
			
		||||
        const tarPath = yield io.which('tar', true);
 | 
			
		||||
        yield exec_1.exec(`"${tarPath}"`, ['xzC', dest, '-f', file]);
 | 
			
		||||
        return dest;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.extractTar = extractTar;
 | 
			
		||||
/**
 | 
			
		||||
 * Extract a zip
 | 
			
		||||
 *
 | 
			
		||||
 * @param file     path to the zip
 | 
			
		||||
 * @param dest     destination directory. Optional.
 | 
			
		||||
 * @returns        path to the destination directory
 | 
			
		||||
 */
 | 
			
		||||
function extractZip(file, dest) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        if (!file) {
 | 
			
		||||
            throw new Error("parameter 'file' is required");
 | 
			
		||||
        }
 | 
			
		||||
        dest = dest || (yield _createExtractFolder(dest));
 | 
			
		||||
        if (IS_WINDOWS) {
 | 
			
		||||
            yield extractZipWin(file, dest);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            yield extractZipNix(file, dest);
 | 
			
		||||
        }
 | 
			
		||||
        return dest;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.extractZip = extractZip;
 | 
			
		||||
function extractZipWin(file, dest) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        // build the powershell command
 | 
			
		||||
        const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
 | 
			
		||||
        const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, '');
 | 
			
		||||
        const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`;
 | 
			
		||||
        // run powershell
 | 
			
		||||
        const powershellPath = yield io.which('powershell');
 | 
			
		||||
        const args = [
 | 
			
		||||
            '-NoLogo',
 | 
			
		||||
            '-Sta',
 | 
			
		||||
            '-NoProfile',
 | 
			
		||||
            '-NonInteractive',
 | 
			
		||||
            '-ExecutionPolicy',
 | 
			
		||||
            'Unrestricted',
 | 
			
		||||
            '-Command',
 | 
			
		||||
            command
 | 
			
		||||
        ];
 | 
			
		||||
        yield exec_1.exec(`"${powershellPath}"`, args);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
function extractZipNix(file, dest) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        const unzipPath = path.join(__dirname, '..', 'scripts', 'externals', 'unzip');
 | 
			
		||||
        yield exec_1.exec(`"${unzipPath}"`, [file], { cwd: dest });
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * Caches a directory and installs it into the tool cacheDir
 | 
			
		||||
 *
 | 
			
		||||
 * @param sourceDir    the directory to cache into tools
 | 
			
		||||
 * @param tool          tool name
 | 
			
		||||
 * @param version       version of the tool.  semver format
 | 
			
		||||
 * @param arch          architecture of the tool.  Optional.  Defaults to machine architecture
 | 
			
		||||
 */
 | 
			
		||||
function cacheDir(sourceDir, tool, version, arch) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        version = semver.clean(version) || version;
 | 
			
		||||
        arch = arch || os.arch();
 | 
			
		||||
        core.debug(`Caching tool ${tool} ${version} ${arch}`);
 | 
			
		||||
        core.debug(`source dir: ${sourceDir}`);
 | 
			
		||||
        if (!fs.statSync(sourceDir).isDirectory()) {
 | 
			
		||||
            throw new Error('sourceDir is not a directory');
 | 
			
		||||
        }
 | 
			
		||||
        // Create the tool dir
 | 
			
		||||
        const destPath = yield _createToolPath(tool, version, arch);
 | 
			
		||||
        // copy each child item. do not move. move can fail on Windows
 | 
			
		||||
        // due to anti-virus software having an open handle on a file.
 | 
			
		||||
        for (const itemName of fs.readdirSync(sourceDir)) {
 | 
			
		||||
            const s = path.join(sourceDir, itemName);
 | 
			
		||||
            yield io.cp(s, destPath, { recursive: true });
 | 
			
		||||
        }
 | 
			
		||||
        // write .complete
 | 
			
		||||
        _completeToolPath(tool, version, arch);
 | 
			
		||||
        return destPath;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.cacheDir = cacheDir;
 | 
			
		||||
/**
 | 
			
		||||
 * Caches a downloaded file (GUID) and installs it
 | 
			
		||||
 * into the tool cache with a given targetName
 | 
			
		||||
 *
 | 
			
		||||
 * @param sourceFile    the file to cache into tools.  Typically a result of downloadTool which is a guid.
 | 
			
		||||
 * @param targetFile    the name of the file name in the tools directory
 | 
			
		||||
 * @param tool          tool name
 | 
			
		||||
 * @param version       version of the tool.  semver format
 | 
			
		||||
 * @param arch          architecture of the tool.  Optional.  Defaults to machine architecture
 | 
			
		||||
 */
 | 
			
		||||
function cacheFile(sourceFile, targetFile, tool, version, arch) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        version = semver.clean(version) || version;
 | 
			
		||||
        arch = arch || os.arch();
 | 
			
		||||
        core.debug(`Caching tool ${tool} ${version} ${arch}`);
 | 
			
		||||
        core.debug(`source file: ${sourceFile}`);
 | 
			
		||||
        if (!fs.statSync(sourceFile).isFile()) {
 | 
			
		||||
            throw new Error('sourceFile is not a file');
 | 
			
		||||
        }
 | 
			
		||||
        // create the tool dir
 | 
			
		||||
        const destFolder = yield _createToolPath(tool, version, arch);
 | 
			
		||||
        // copy instead of move. move can fail on Windows due to
 | 
			
		||||
        // anti-virus software having an open handle on a file.
 | 
			
		||||
        const destPath = path.join(destFolder, targetFile);
 | 
			
		||||
        core.debug(`destination file ${destPath}`);
 | 
			
		||||
        yield io.cp(sourceFile, destPath);
 | 
			
		||||
        // write .complete
 | 
			
		||||
        _completeToolPath(tool, version, arch);
 | 
			
		||||
        return destFolder;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.cacheFile = cacheFile;
 | 
			
		||||
/**
 | 
			
		||||
 * Finds the path to a tool version in the local installed tool cache
 | 
			
		||||
 *
 | 
			
		||||
 * @param toolName      name of the tool
 | 
			
		||||
 * @param versionSpec   version of the tool
 | 
			
		||||
 * @param arch          optional arch.  defaults to arch of computer
 | 
			
		||||
 */
 | 
			
		||||
function find(toolName, versionSpec, arch) {
 | 
			
		||||
    if (!toolName) {
 | 
			
		||||
        throw new Error('toolName parameter is required');
 | 
			
		||||
    }
 | 
			
		||||
    if (!versionSpec) {
 | 
			
		||||
        throw new Error('versionSpec parameter is required');
 | 
			
		||||
    }
 | 
			
		||||
    arch = arch || os.arch();
 | 
			
		||||
    // attempt to resolve an explicit version
 | 
			
		||||
    if (!_isExplicitVersion(versionSpec)) {
 | 
			
		||||
        const localVersions = findAllVersions(toolName, arch);
 | 
			
		||||
        const match = _evaluateVersions(localVersions, versionSpec);
 | 
			
		||||
        versionSpec = match;
 | 
			
		||||
    }
 | 
			
		||||
    // check for the explicit version in the cache
 | 
			
		||||
    let toolPath = '';
 | 
			
		||||
    if (versionSpec) {
 | 
			
		||||
        versionSpec = semver.clean(versionSpec) || '';
 | 
			
		||||
        const cachePath = path.join(cacheRoot, toolName, versionSpec, arch);
 | 
			
		||||
        core.debug(`checking cache: ${cachePath}`);
 | 
			
		||||
        if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) {
 | 
			
		||||
            core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`);
 | 
			
		||||
            toolPath = cachePath;
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            core.debug('not found');
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return toolPath;
 | 
			
		||||
}
 | 
			
		||||
exports.find = find;
 | 
			
		||||
/**
 | 
			
		||||
 * Finds the paths to all versions of a tool that are installed in the local tool cache
 | 
			
		||||
 *
 | 
			
		||||
 * @param toolName  name of the tool
 | 
			
		||||
 * @param arch      optional arch.  defaults to arch of computer
 | 
			
		||||
 */
 | 
			
		||||
function findAllVersions(toolName, arch) {
 | 
			
		||||
    const versions = [];
 | 
			
		||||
    arch = arch || os.arch();
 | 
			
		||||
    const toolPath = path.join(cacheRoot, toolName);
 | 
			
		||||
    if (fs.existsSync(toolPath)) {
 | 
			
		||||
        const children = fs.readdirSync(toolPath);
 | 
			
		||||
        for (const child of children) {
 | 
			
		||||
            if (_isExplicitVersion(child)) {
 | 
			
		||||
                const fullPath = path.join(toolPath, child, arch || '');
 | 
			
		||||
                if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) {
 | 
			
		||||
                    versions.push(child);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return versions;
 | 
			
		||||
}
 | 
			
		||||
exports.findAllVersions = findAllVersions;
 | 
			
		||||
function _createExtractFolder(dest) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        if (!dest) {
 | 
			
		||||
            // create a temp dir
 | 
			
		||||
            dest = path.join(tempDirectory, uuidV4());
 | 
			
		||||
        }
 | 
			
		||||
        yield io.mkdirP(dest);
 | 
			
		||||
        return dest;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
function _createToolPath(tool, version, arch) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || '');
 | 
			
		||||
        core.debug(`destination ${folderPath}`);
 | 
			
		||||
        const markerPath = `${folderPath}.complete`;
 | 
			
		||||
        yield io.rmRF(folderPath);
 | 
			
		||||
        yield io.rmRF(markerPath);
 | 
			
		||||
        yield io.mkdirP(folderPath);
 | 
			
		||||
        return folderPath;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
function _completeToolPath(tool, version, arch) {
 | 
			
		||||
    const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || '');
 | 
			
		||||
    const markerPath = `${folderPath}.complete`;
 | 
			
		||||
    fs.writeFileSync(markerPath, '');
 | 
			
		||||
    core.debug('finished caching tool');
 | 
			
		||||
}
 | 
			
		||||
function _isExplicitVersion(versionSpec) {
 | 
			
		||||
    const c = semver.clean(versionSpec) || '';
 | 
			
		||||
    core.debug(`isExplicit: ${c}`);
 | 
			
		||||
    const valid = semver.valid(c) != null;
 | 
			
		||||
    core.debug(`explicit? ${valid}`);
 | 
			
		||||
    return valid;
 | 
			
		||||
}
 | 
			
		||||
function _evaluateVersions(versions, versionSpec) {
 | 
			
		||||
    let version = '';
 | 
			
		||||
    core.debug(`evaluating ${versions.length} versions`);
 | 
			
		||||
    versions = versions.sort((a, b) => {
 | 
			
		||||
        if (semver.gt(a, b)) {
 | 
			
		||||
            return 1;
 | 
			
		||||
        }
 | 
			
		||||
        return -1;
 | 
			
		||||
    });
 | 
			
		||||
    for (let i = versions.length - 1; i >= 0; i--) {
 | 
			
		||||
        const potential = versions[i];
 | 
			
		||||
        const satisfied = semver.satisfies(potential, versionSpec);
 | 
			
		||||
        if (satisfied) {
 | 
			
		||||
            version = potential;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (version) {
 | 
			
		||||
        core.debug(`matched: ${version}`);
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        core.debug('match not found');
 | 
			
		||||
    }
 | 
			
		||||
    return version;
 | 
			
		||||
}
 | 
			
		||||
//# sourceMappingURL=tool-cache.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/@actions/tool-cache/lib/tool-cache.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/@actions/tool-cache/lib/tool-cache.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										75
									
								
								node_modules/@actions/tool-cache/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										75
									
								
								node_modules/@actions/tool-cache/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,75 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "_from": "@actions/tool-cache@^1.0.0",
 | 
			
		||||
  "_id": "@actions/tool-cache@1.0.0",
 | 
			
		||||
  "_inBundle": false,
 | 
			
		||||
  "_integrity": "sha512-l3zT0IfDfi5Ik5aMpnXqGHGATxN8xa9ls4ue+X/CBXpPhRMRZS4vcuh5Q9T98WAGbkysRCfhpbksTPHIcKnNwQ==",
 | 
			
		||||
  "_location": "/@actions/tool-cache",
 | 
			
		||||
  "_phantomChildren": {},
 | 
			
		||||
  "_requested": {
 | 
			
		||||
    "type": "range",
 | 
			
		||||
    "registry": true,
 | 
			
		||||
    "raw": "@actions/tool-cache@^1.0.0",
 | 
			
		||||
    "name": "@actions/tool-cache",
 | 
			
		||||
    "escapedName": "@actions%2ftool-cache",
 | 
			
		||||
    "scope": "@actions",
 | 
			
		||||
    "rawSpec": "^1.0.0",
 | 
			
		||||
    "saveSpec": null,
 | 
			
		||||
    "fetchSpec": "^1.0.0"
 | 
			
		||||
  },
 | 
			
		||||
  "_requiredBy": [
 | 
			
		||||
    "/"
 | 
			
		||||
  ],
 | 
			
		||||
  "_resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.0.0.tgz",
 | 
			
		||||
  "_shasum": "a9ac414bd2e0bf1f5f0302f029193c418d344c09",
 | 
			
		||||
  "_spec": "@actions/tool-cache@^1.0.0",
 | 
			
		||||
  "_where": "C:\\Users\\damccorm\\Documents\\setup-python",
 | 
			
		||||
  "bugs": {
 | 
			
		||||
    "url": "https://github.com/actions/toolkit/issues"
 | 
			
		||||
  },
 | 
			
		||||
  "bundleDependencies": false,
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@actions/core": "^1.0.0",
 | 
			
		||||
    "@actions/exec": "^1.0.0",
 | 
			
		||||
    "@actions/io": "^1.0.0",
 | 
			
		||||
    "semver": "^6.1.0",
 | 
			
		||||
    "typed-rest-client": "^1.4.0",
 | 
			
		||||
    "uuid": "^3.3.2"
 | 
			
		||||
  },
 | 
			
		||||
  "deprecated": false,
 | 
			
		||||
  "description": "Actions tool-cache lib",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@types/nock": "^10.0.3",
 | 
			
		||||
    "@types/semver": "^6.0.0",
 | 
			
		||||
    "@types/uuid": "^3.4.4",
 | 
			
		||||
    "nock": "^10.0.6"
 | 
			
		||||
  },
 | 
			
		||||
  "directories": {
 | 
			
		||||
    "lib": "lib",
 | 
			
		||||
    "test": "__tests__"
 | 
			
		||||
  },
 | 
			
		||||
  "files": [
 | 
			
		||||
    "lib",
 | 
			
		||||
    "scripts"
 | 
			
		||||
  ],
 | 
			
		||||
  "gitHead": "a40bce7c8d382aa3dbadaa327acbc696e9390e55",
 | 
			
		||||
  "homepage": "https://github.com/actions/toolkit/tree/master/packages/exec",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "exec",
 | 
			
		||||
    "actions"
 | 
			
		||||
  ],
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "main": "lib/tool-cache.js",
 | 
			
		||||
  "name": "@actions/tool-cache",
 | 
			
		||||
  "publishConfig": {
 | 
			
		||||
    "access": "public"
 | 
			
		||||
  },
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git+https://github.com/actions/toolkit.git"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: run tests from root\" && exit 1",
 | 
			
		||||
    "tsc": "tsc"
 | 
			
		||||
  },
 | 
			
		||||
  "version": "1.0.0"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										60
									
								
								node_modules/@actions/tool-cache/scripts/Invoke-7zdec.ps1
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										60
									
								
								node_modules/@actions/tool-cache/scripts/Invoke-7zdec.ps1
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,60 +0,0 @@
 | 
			
		||||
[CmdletBinding()]
 | 
			
		||||
param(
 | 
			
		||||
    [Parameter(Mandatory = $true)]
 | 
			
		||||
    [string]$Source,
 | 
			
		||||
 | 
			
		||||
    [Parameter(Mandatory = $true)]
 | 
			
		||||
    [string]$Target)
 | 
			
		||||
 | 
			
		||||
# This script translates the output from 7zdec into UTF8. Node has limited
 | 
			
		||||
# built-in support for encodings.
 | 
			
		||||
#
 | 
			
		||||
# 7zdec uses the system default code page. The system default code page varies
 | 
			
		||||
# depending on the locale configuration. On an en-US box, the system default code
 | 
			
		||||
# page is Windows-1252.
 | 
			
		||||
#
 | 
			
		||||
# Note, on a typical en-US box, testing with the 'ç' character is a good way to
 | 
			
		||||
# determine whether data is passed correctly between processes. This is because
 | 
			
		||||
# the 'ç' character has a different code point across each of the common encodings
 | 
			
		||||
# on a typical en-US box, i.e.
 | 
			
		||||
#   1) the default console-output code page (IBM437)
 | 
			
		||||
#   2) the system default code page (i.e. CP_ACP) (Windows-1252)
 | 
			
		||||
#   3) UTF8
 | 
			
		||||
 | 
			
		||||
$ErrorActionPreference = 'Stop'
 | 
			
		||||
 | 
			
		||||
# Redefine the wrapper over STDOUT to use UTF8. Node expects UTF8 by default.
 | 
			
		||||
$stdout = [System.Console]::OpenStandardOutput()
 | 
			
		||||
$utf8 = New-Object System.Text.UTF8Encoding($false) # do not emit BOM
 | 
			
		||||
$writer = New-Object System.IO.StreamWriter($stdout, $utf8)
 | 
			
		||||
[System.Console]::SetOut($writer)
 | 
			
		||||
 | 
			
		||||
# All subsequent output must be written using [System.Console]::WriteLine(). In
 | 
			
		||||
# PowerShell 4, Write-Host and Out-Default do not consider the updated stream writer.
 | 
			
		||||
 | 
			
		||||
Set-Location -LiteralPath $Target
 | 
			
		||||
 | 
			
		||||
# Print the ##command.
 | 
			
		||||
$_7zdec = Join-Path -Path "$PSScriptRoot" -ChildPath "externals/7zdec.exe"
 | 
			
		||||
[System.Console]::WriteLine("##[command]$_7zdec x `"$Source`"")
 | 
			
		||||
 | 
			
		||||
# The $OutputEncoding variable instructs PowerShell how to interpret the output
 | 
			
		||||
# from the external command.
 | 
			
		||||
$OutputEncoding = [System.Text.Encoding]::Default
 | 
			
		||||
 | 
			
		||||
# Note, the output from 7zdec.exe needs to be iterated over. Otherwise PowerShell.exe
 | 
			
		||||
# will launch the external command in such a way that it inherits the streams.
 | 
			
		||||
& $_7zdec x $Source 2>&1 |
 | 
			
		||||
    ForEach-Object {
 | 
			
		||||
        if ($_ -is [System.Management.Automation.ErrorRecord]) {
 | 
			
		||||
            [System.Console]::WriteLine($_.Exception.Message)
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            [System.Console]::WriteLine($_)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
[System.Console]::WriteLine("##[debug]7zdec.exe exit code '$LASTEXITCODE'")
 | 
			
		||||
[System.Console]::Out.Flush()
 | 
			
		||||
if ($LASTEXITCODE -ne 0) {
 | 
			
		||||
    exit $LASTEXITCODE
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								node_modules/@actions/tool-cache/scripts/externals/7zdec.exe
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								node_modules/@actions/tool-cache/scripts/externals/7zdec.exe
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								node_modules/@actions/tool-cache/scripts/externals/unzip
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								node_modules/@actions/tool-cache/scripts/externals/unzip
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										70
									
								
								node_modules/semver/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										70
									
								
								node_modules/semver/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,70 +0,0 @@
 | 
			
		||||
# changes log
 | 
			
		||||
 | 
			
		||||
## 6.2.0
 | 
			
		||||
 | 
			
		||||
* Coerce numbers to strings when passed to semver.coerce()
 | 
			
		||||
* Add `rtl` option to coerce from right to left
 | 
			
		||||
 | 
			
		||||
## 6.1.3
 | 
			
		||||
 | 
			
		||||
* Handle X-ranges properly in includePrerelease mode
 | 
			
		||||
 | 
			
		||||
## 6.1.2
 | 
			
		||||
 | 
			
		||||
* Do not throw when testing invalid version strings
 | 
			
		||||
 | 
			
		||||
## 6.1.1
 | 
			
		||||
 | 
			
		||||
* Add options support for semver.coerce()
 | 
			
		||||
* Handle undefined version passed to Range.test
 | 
			
		||||
 | 
			
		||||
## 6.1.0
 | 
			
		||||
 | 
			
		||||
* Add semver.compareBuild function
 | 
			
		||||
* Support `*` in semver.intersects
 | 
			
		||||
 | 
			
		||||
## 6.0
 | 
			
		||||
 | 
			
		||||
* Fix `intersects` logic.
 | 
			
		||||
 | 
			
		||||
    This is technically a bug fix, but since it is also a change to behavior
 | 
			
		||||
    that may require users updating their code, it is marked as a major
 | 
			
		||||
    version increment.
 | 
			
		||||
 | 
			
		||||
## 5.7
 | 
			
		||||
 | 
			
		||||
* Add `minVersion` method
 | 
			
		||||
 | 
			
		||||
## 5.6
 | 
			
		||||
 | 
			
		||||
* Move boolean `loose` param to an options object, with
 | 
			
		||||
  backwards-compatibility protection.
 | 
			
		||||
* Add ability to opt out of special prerelease version handling with
 | 
			
		||||
  the `includePrerelease` option flag.
 | 
			
		||||
 | 
			
		||||
## 5.5
 | 
			
		||||
 | 
			
		||||
* Add version coercion capabilities
 | 
			
		||||
 | 
			
		||||
## 5.4
 | 
			
		||||
 | 
			
		||||
* Add intersection checking
 | 
			
		||||
 | 
			
		||||
## 5.3
 | 
			
		||||
 | 
			
		||||
* Add `minSatisfying` method
 | 
			
		||||
 | 
			
		||||
## 5.2
 | 
			
		||||
 | 
			
		||||
* Add `prerelease(v)` that returns prerelease components
 | 
			
		||||
 | 
			
		||||
## 5.1
 | 
			
		||||
 | 
			
		||||
* Add Backus-Naur for ranges
 | 
			
		||||
* Remove excessively cute inspection methods
 | 
			
		||||
 | 
			
		||||
## 5.0
 | 
			
		||||
 | 
			
		||||
* Remove AMD/Browserified build artifacts
 | 
			
		||||
* Fix ltr and gtr when using the `*` range
 | 
			
		||||
* Fix for range `*` with a prerelease identifier
 | 
			
		||||
							
								
								
									
										15
									
								
								node_modules/semver/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								node_modules/semver/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,15 +0,0 @@
 | 
			
		||||
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.
 | 
			
		||||
							
								
								
									
										443
									
								
								node_modules/semver/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										443
									
								
								node_modules/semver/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,443 +0,0 @@
 | 
			
		||||
semver(1) -- The semantic versioner for npm
 | 
			
		||||
===========================================
 | 
			
		||||
 | 
			
		||||
## Install
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
npm install semver
 | 
			
		||||
````
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
As a node module:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const semver = require('semver')
 | 
			
		||||
 | 
			
		||||
semver.valid('1.2.3') // '1.2.3'
 | 
			
		||||
semver.valid('a.b.c') // null
 | 
			
		||||
semver.clean('  =v1.2.3   ') // '1.2.3'
 | 
			
		||||
semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
 | 
			
		||||
semver.gt('1.2.3', '9.8.7') // false
 | 
			
		||||
semver.lt('1.2.3', '9.8.7') // true
 | 
			
		||||
semver.minVersion('>=1.0.0') // '1.0.0'
 | 
			
		||||
semver.valid(semver.coerce('v2')) // '2.0.0'
 | 
			
		||||
semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7'
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
As a command-line utility:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ semver -h
 | 
			
		||||
 | 
			
		||||
A JavaScript implementation of the https://semver.org/ specification
 | 
			
		||||
Copyright Isaac Z. Schlueter
 | 
			
		||||
 | 
			
		||||
Usage: semver [options] <version> [<version> [...]]
 | 
			
		||||
Prints valid versions sorted by SemVer precedence
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
-r --range <range>
 | 
			
		||||
        Print versions that match the specified range.
 | 
			
		||||
 | 
			
		||||
-i --increment [<level>]
 | 
			
		||||
        Increment a version by the specified level.  Level can
 | 
			
		||||
        be one of: major, minor, patch, premajor, preminor,
 | 
			
		||||
        prepatch, or prerelease.  Default level is 'patch'.
 | 
			
		||||
        Only one version may be specified.
 | 
			
		||||
 | 
			
		||||
--preid <identifier>
 | 
			
		||||
        Identifier to be used to prefix premajor, preminor,
 | 
			
		||||
        prepatch or prerelease version increments.
 | 
			
		||||
 | 
			
		||||
-l --loose
 | 
			
		||||
        Interpret versions and ranges loosely
 | 
			
		||||
 | 
			
		||||
-p --include-prerelease
 | 
			
		||||
        Always include prerelease versions in range matching
 | 
			
		||||
 | 
			
		||||
-c --coerce
 | 
			
		||||
        Coerce a string into SemVer if possible
 | 
			
		||||
        (does not imply --loose)
 | 
			
		||||
 | 
			
		||||
--rtl
 | 
			
		||||
        Coerce version strings right to left
 | 
			
		||||
 | 
			
		||||
--ltr
 | 
			
		||||
        Coerce version strings left to right (default)
 | 
			
		||||
 | 
			
		||||
Program exits successfully if any valid version satisfies
 | 
			
		||||
all supplied ranges, and prints all satisfying versions.
 | 
			
		||||
 | 
			
		||||
If no satisfying versions are found, then exits failure.
 | 
			
		||||
 | 
			
		||||
Versions are printed in ascending order, so supplying
 | 
			
		||||
multiple versions to the utility will just sort them.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Versions
 | 
			
		||||
 | 
			
		||||
A "version" is described by the `v2.0.0` specification found at
 | 
			
		||||
<https://semver.org/>.
 | 
			
		||||
 | 
			
		||||
A leading `"="` or `"v"` character is stripped off and ignored.
 | 
			
		||||
 | 
			
		||||
## Ranges
 | 
			
		||||
 | 
			
		||||
A `version range` is a set of `comparators` which specify versions
 | 
			
		||||
that satisfy the range.
 | 
			
		||||
 | 
			
		||||
A `comparator` is composed of an `operator` and a `version`.  The set
 | 
			
		||||
of primitive `operators` is:
 | 
			
		||||
 | 
			
		||||
* `<` Less than
 | 
			
		||||
* `<=` Less than or equal to
 | 
			
		||||
* `>` Greater than
 | 
			
		||||
* `>=` Greater than or equal to
 | 
			
		||||
* `=` Equal.  If no operator is specified, then equality is assumed,
 | 
			
		||||
  so this operator is optional, but MAY be included.
 | 
			
		||||
 | 
			
		||||
For example, the comparator `>=1.2.7` would match the versions
 | 
			
		||||
`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6`
 | 
			
		||||
or `1.1.0`.
 | 
			
		||||
 | 
			
		||||
Comparators can be joined by whitespace to form a `comparator set`,
 | 
			
		||||
which is satisfied by the **intersection** of all of the comparators
 | 
			
		||||
it includes.
 | 
			
		||||
 | 
			
		||||
A range is composed of one or more comparator sets, joined by `||`.  A
 | 
			
		||||
version matches a range if and only if every comparator in at least
 | 
			
		||||
one of the `||`-separated comparator sets is satisfied by the version.
 | 
			
		||||
 | 
			
		||||
For example, the range `>=1.2.7 <1.3.0` would match the versions
 | 
			
		||||
`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`,
 | 
			
		||||
or `1.1.0`.
 | 
			
		||||
 | 
			
		||||
The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`,
 | 
			
		||||
`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`.
 | 
			
		||||
 | 
			
		||||
### Prerelease Tags
 | 
			
		||||
 | 
			
		||||
If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then
 | 
			
		||||
it will only be allowed to satisfy comparator sets if at least one
 | 
			
		||||
comparator with the same `[major, minor, patch]` tuple also has a
 | 
			
		||||
prerelease tag.
 | 
			
		||||
 | 
			
		||||
For example, the range `>1.2.3-alpha.3` would be allowed to match the
 | 
			
		||||
version `1.2.3-alpha.7`, but it would *not* be satisfied by
 | 
			
		||||
`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater
 | 
			
		||||
than" `1.2.3-alpha.3` according to the SemVer sort rules.  The version
 | 
			
		||||
range only accepts prerelease tags on the `1.2.3` version.  The
 | 
			
		||||
version `3.4.5` *would* satisfy the range, because it does not have a
 | 
			
		||||
prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`.
 | 
			
		||||
 | 
			
		||||
The purpose for this behavior is twofold.  First, prerelease versions
 | 
			
		||||
frequently are updated very quickly, and contain many breaking changes
 | 
			
		||||
that are (by the author's design) not yet fit for public consumption.
 | 
			
		||||
Therefore, by default, they are excluded from range matching
 | 
			
		||||
semantics.
 | 
			
		||||
 | 
			
		||||
Second, a user who has opted into using a prerelease version has
 | 
			
		||||
clearly indicated the intent to use *that specific* set of
 | 
			
		||||
alpha/beta/rc versions.  By including a prerelease tag in the range,
 | 
			
		||||
the user is indicating that they are aware of the risk.  However, it
 | 
			
		||||
is still not appropriate to assume that they have opted into taking a
 | 
			
		||||
similar risk on the *next* set of prerelease versions.
 | 
			
		||||
 | 
			
		||||
Note that this behavior can be suppressed (treating all prerelease
 | 
			
		||||
versions as if they were normal versions, for the purpose of range
 | 
			
		||||
matching) by setting the `includePrerelease` flag on the options
 | 
			
		||||
object to any
 | 
			
		||||
[functions](https://github.com/npm/node-semver#functions) that do
 | 
			
		||||
range matching.
 | 
			
		||||
 | 
			
		||||
#### Prerelease Identifiers
 | 
			
		||||
 | 
			
		||||
The method `.inc` takes an additional `identifier` string argument that
 | 
			
		||||
will append the value of the string as a prerelease identifier:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
semver.inc('1.2.3', 'prerelease', 'beta')
 | 
			
		||||
// '1.2.4-beta.0'
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
command-line example:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ semver 1.2.3 -i prerelease --preid beta
 | 
			
		||||
1.2.4-beta.0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Which then can be used to increment further:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ semver 1.2.4-beta.0 -i prerelease
 | 
			
		||||
1.2.4-beta.1
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Advanced Range Syntax
 | 
			
		||||
 | 
			
		||||
Advanced range syntax desugars to primitive comparators in
 | 
			
		||||
deterministic ways.
 | 
			
		||||
 | 
			
		||||
Advanced ranges may be combined in the same way as primitive
 | 
			
		||||
comparators using white space or `||`.
 | 
			
		||||
 | 
			
		||||
#### Hyphen Ranges `X.Y.Z - A.B.C`
 | 
			
		||||
 | 
			
		||||
Specifies an inclusive set.
 | 
			
		||||
 | 
			
		||||
* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
 | 
			
		||||
 | 
			
		||||
If a partial version is provided as the first version in the inclusive
 | 
			
		||||
range, then the missing pieces are replaced with zeroes.
 | 
			
		||||
 | 
			
		||||
* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4`
 | 
			
		||||
 | 
			
		||||
If a partial version is provided as the second version in the
 | 
			
		||||
inclusive range, then all versions that start with the supplied parts
 | 
			
		||||
of the tuple are accepted, but nothing that would be greater than the
 | 
			
		||||
provided tuple parts.
 | 
			
		||||
 | 
			
		||||
* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0`
 | 
			
		||||
* `1.2.3 - 2` := `>=1.2.3 <3.0.0`
 | 
			
		||||
 | 
			
		||||
#### X-Ranges `1.2.x` `1.X` `1.2.*` `*`
 | 
			
		||||
 | 
			
		||||
Any of `X`, `x`, or `*` may be used to "stand in" for one of the
 | 
			
		||||
numeric values in the `[major, minor, patch]` tuple.
 | 
			
		||||
 | 
			
		||||
* `*` := `>=0.0.0` (Any version satisfies)
 | 
			
		||||
* `1.x` := `>=1.0.0 <2.0.0` (Matching major version)
 | 
			
		||||
* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions)
 | 
			
		||||
 | 
			
		||||
A partial version range is treated as an X-Range, so the special
 | 
			
		||||
character is in fact optional.
 | 
			
		||||
 | 
			
		||||
* `""` (empty string) := `*` := `>=0.0.0`
 | 
			
		||||
* `1` := `1.x.x` := `>=1.0.0 <2.0.0`
 | 
			
		||||
* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0`
 | 
			
		||||
 | 
			
		||||
#### Tilde Ranges `~1.2.3` `~1.2` `~1`
 | 
			
		||||
 | 
			
		||||
Allows patch-level changes if a minor version is specified on the
 | 
			
		||||
comparator.  Allows minor-level changes if not.
 | 
			
		||||
 | 
			
		||||
* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0`
 | 
			
		||||
* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`)
 | 
			
		||||
* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`)
 | 
			
		||||
* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0`
 | 
			
		||||
* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`)
 | 
			
		||||
* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`)
 | 
			
		||||
* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in
 | 
			
		||||
  the `1.2.3` version will be allowed, if they are greater than or
 | 
			
		||||
  equal to `beta.2`.  So, `1.2.3-beta.4` would be allowed, but
 | 
			
		||||
  `1.2.4-beta.2` would not, because it is a prerelease of a
 | 
			
		||||
  different `[major, minor, patch]` tuple.
 | 
			
		||||
 | 
			
		||||
#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4`
 | 
			
		||||
 | 
			
		||||
Allows changes that do not modify the left-most non-zero element in the
 | 
			
		||||
`[major, minor, patch]` tuple.  In other words, this allows patch and
 | 
			
		||||
minor updates for versions `1.0.0` and above, patch updates for
 | 
			
		||||
versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`.
 | 
			
		||||
 | 
			
		||||
Many authors treat a `0.x` version as if the `x` were the major
 | 
			
		||||
"breaking-change" indicator.
 | 
			
		||||
 | 
			
		||||
Caret ranges are ideal when an author may make breaking changes
 | 
			
		||||
between `0.2.4` and `0.3.0` releases, which is a common practice.
 | 
			
		||||
However, it presumes that there will *not* be breaking changes between
 | 
			
		||||
`0.2.4` and `0.2.5`.  It allows for changes that are presumed to be
 | 
			
		||||
additive (but non-breaking), according to commonly observed practices.
 | 
			
		||||
 | 
			
		||||
* `^1.2.3` := `>=1.2.3 <2.0.0`
 | 
			
		||||
* `^0.2.3` := `>=0.2.3 <0.3.0`
 | 
			
		||||
* `^0.0.3` := `>=0.0.3 <0.0.4`
 | 
			
		||||
* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in
 | 
			
		||||
  the `1.2.3` version will be allowed, if they are greater than or
 | 
			
		||||
  equal to `beta.2`.  So, `1.2.3-beta.4` would be allowed, but
 | 
			
		||||
  `1.2.4-beta.2` would not, because it is a prerelease of a
 | 
			
		||||
  different `[major, minor, patch]` tuple.
 | 
			
		||||
* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4`  Note that prereleases in the
 | 
			
		||||
  `0.0.3` version *only* will be allowed, if they are greater than or
 | 
			
		||||
  equal to `beta`.  So, `0.0.3-pr.2` would be allowed.
 | 
			
		||||
 | 
			
		||||
When parsing caret ranges, a missing `patch` value desugars to the
 | 
			
		||||
number `0`, but will allow flexibility within that value, even if the
 | 
			
		||||
major and minor versions are both `0`.
 | 
			
		||||
 | 
			
		||||
* `^1.2.x` := `>=1.2.0 <2.0.0`
 | 
			
		||||
* `^0.0.x` := `>=0.0.0 <0.1.0`
 | 
			
		||||
* `^0.0` := `>=0.0.0 <0.1.0`
 | 
			
		||||
 | 
			
		||||
A missing `minor` and `patch` values will desugar to zero, but also
 | 
			
		||||
allow flexibility within those values, even if the major version is
 | 
			
		||||
zero.
 | 
			
		||||
 | 
			
		||||
* `^1.x` := `>=1.0.0 <2.0.0`
 | 
			
		||||
* `^0.x` := `>=0.0.0 <1.0.0`
 | 
			
		||||
 | 
			
		||||
### Range Grammar
 | 
			
		||||
 | 
			
		||||
Putting all this together, here is a Backus-Naur grammar for ranges,
 | 
			
		||||
for the benefit of parser authors:
 | 
			
		||||
 | 
			
		||||
```bnf
 | 
			
		||||
range-set  ::= range ( logical-or range ) *
 | 
			
		||||
logical-or ::= ( ' ' ) * '||' ( ' ' ) *
 | 
			
		||||
range      ::= hyphen | simple ( ' ' simple ) * | ''
 | 
			
		||||
hyphen     ::= partial ' - ' partial
 | 
			
		||||
simple     ::= primitive | partial | tilde | caret
 | 
			
		||||
primitive  ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
 | 
			
		||||
partial    ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
 | 
			
		||||
xr         ::= 'x' | 'X' | '*' | nr
 | 
			
		||||
nr         ::= '0' | ['1'-'9'] ( ['0'-'9'] ) *
 | 
			
		||||
tilde      ::= '~' partial
 | 
			
		||||
caret      ::= '^' partial
 | 
			
		||||
qualifier  ::= ( '-' pre )? ( '+' build )?
 | 
			
		||||
pre        ::= parts
 | 
			
		||||
build      ::= parts
 | 
			
		||||
parts      ::= part ( '.' part ) *
 | 
			
		||||
part       ::= nr | [-0-9A-Za-z]+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Functions
 | 
			
		||||
 | 
			
		||||
All methods and classes take a final `options` object argument.  All
 | 
			
		||||
options in this object are `false` by default.  The options supported
 | 
			
		||||
are:
 | 
			
		||||
 | 
			
		||||
- `loose`  Be more forgiving about not-quite-valid semver strings.
 | 
			
		||||
  (Any resulting output will always be 100% strict compliant, of
 | 
			
		||||
  course.)  For backwards compatibility reasons, if the `options`
 | 
			
		||||
  argument is a boolean value instead of an object, it is interpreted
 | 
			
		||||
  to be the `loose` param.
 | 
			
		||||
- `includePrerelease`  Set to suppress the [default
 | 
			
		||||
  behavior](https://github.com/npm/node-semver#prerelease-tags) of
 | 
			
		||||
  excluding prerelease tagged versions from ranges unless they are
 | 
			
		||||
  explicitly opted into.
 | 
			
		||||
 | 
			
		||||
Strict-mode Comparators and Ranges will be strict about the SemVer
 | 
			
		||||
strings that they parse.
 | 
			
		||||
 | 
			
		||||
* `valid(v)`: Return the parsed version, or null if it's not valid.
 | 
			
		||||
* `inc(v, release)`: Return the version incremented by the release
 | 
			
		||||
  type (`major`,   `premajor`, `minor`, `preminor`, `patch`,
 | 
			
		||||
  `prepatch`, or `prerelease`), or null if it's not valid
 | 
			
		||||
  * `premajor` in one call will bump the version up to the next major
 | 
			
		||||
    version and down to a prerelease of that major version.
 | 
			
		||||
    `preminor`, and `prepatch` work the same way.
 | 
			
		||||
  * If called from a non-prerelease version, the `prerelease` will work the
 | 
			
		||||
    same as `prepatch`. It increments the patch version, then makes a
 | 
			
		||||
    prerelease. If the input version is already a prerelease it simply
 | 
			
		||||
    increments it.
 | 
			
		||||
* `prerelease(v)`: Returns an array of prerelease components, or null
 | 
			
		||||
  if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]`
 | 
			
		||||
* `major(v)`: Return the major version number.
 | 
			
		||||
* `minor(v)`: Return the minor version number.
 | 
			
		||||
* `patch(v)`: Return the patch version number.
 | 
			
		||||
* `intersects(r1, r2, loose)`: Return true if the two supplied ranges
 | 
			
		||||
  or comparators intersect.
 | 
			
		||||
* `parse(v)`: Attempt to parse a string as a semantic version, returning either
 | 
			
		||||
  a `SemVer` object or `null`.
 | 
			
		||||
 | 
			
		||||
### Comparison
 | 
			
		||||
 | 
			
		||||
* `gt(v1, v2)`: `v1 > v2`
 | 
			
		||||
* `gte(v1, v2)`: `v1 >= v2`
 | 
			
		||||
* `lt(v1, v2)`: `v1 < v2`
 | 
			
		||||
* `lte(v1, v2)`: `v1 <= v2`
 | 
			
		||||
* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent,
 | 
			
		||||
  even if they're not the exact same string.  You already know how to
 | 
			
		||||
  compare strings.
 | 
			
		||||
* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`.
 | 
			
		||||
* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call
 | 
			
		||||
  the corresponding function above.  `"==="` and `"!=="` do simple
 | 
			
		||||
  string comparison, but are included for completeness.  Throws if an
 | 
			
		||||
  invalid comparison string is provided.
 | 
			
		||||
* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if
 | 
			
		||||
  `v2` is greater.  Sorts in ascending order if passed to `Array.sort()`.
 | 
			
		||||
* `rcompare(v1, v2)`: The reverse of compare.  Sorts an array of versions
 | 
			
		||||
  in descending order when passed to `Array.sort()`.
 | 
			
		||||
* `compareBuild(v1, v2)`: The same as `compare` but considers `build` when two versions
 | 
			
		||||
  are equal.  Sorts in ascending order if passed to `Array.sort()`.
 | 
			
		||||
  `v2` is greater.  Sorts in ascending order if passed to `Array.sort()`.
 | 
			
		||||
* `diff(v1, v2)`: Returns difference between two versions by the release type
 | 
			
		||||
  (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),
 | 
			
		||||
  or null if the versions are the same.
 | 
			
		||||
 | 
			
		||||
### Comparators
 | 
			
		||||
 | 
			
		||||
* `intersects(comparator)`: Return true if the comparators intersect
 | 
			
		||||
 | 
			
		||||
### Ranges
 | 
			
		||||
 | 
			
		||||
* `validRange(range)`: Return the valid range or null if it's not valid
 | 
			
		||||
* `satisfies(version, range)`: Return true if the version satisfies the
 | 
			
		||||
  range.
 | 
			
		||||
* `maxSatisfying(versions, range)`: Return the highest version in the list
 | 
			
		||||
  that satisfies the range, or `null` if none of them do.
 | 
			
		||||
* `minSatisfying(versions, range)`: Return the lowest version in the list
 | 
			
		||||
  that satisfies the range, or `null` if none of them do.
 | 
			
		||||
* `minVersion(range)`: Return the lowest version that can possibly match
 | 
			
		||||
  the given range.
 | 
			
		||||
* `gtr(version, range)`: Return `true` if version is greater than all the
 | 
			
		||||
  versions possible in the range.
 | 
			
		||||
* `ltr(version, range)`: Return `true` if version is less than all the
 | 
			
		||||
  versions possible in the range.
 | 
			
		||||
* `outside(version, range, hilo)`: Return true if the version is outside
 | 
			
		||||
  the bounds of the range in either the high or low direction.  The
 | 
			
		||||
  `hilo` argument must be either the string `'>'` or `'<'`.  (This is
 | 
			
		||||
  the function called by `gtr` and `ltr`.)
 | 
			
		||||
* `intersects(range)`: Return true if any of the ranges comparators intersect
 | 
			
		||||
 | 
			
		||||
Note that, since ranges may be non-contiguous, a version might not be
 | 
			
		||||
greater than a range, less than a range, *or* satisfy a range!  For
 | 
			
		||||
example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`
 | 
			
		||||
until `2.0.0`, so the version `1.2.10` would not be greater than the
 | 
			
		||||
range (because `2.0.1` satisfies, which is higher), nor less than the
 | 
			
		||||
range (since `1.2.8` satisfies, which is lower), and it also does not
 | 
			
		||||
satisfy the range.
 | 
			
		||||
 | 
			
		||||
If you want to know if a version satisfies or does not satisfy a
 | 
			
		||||
range, use the `satisfies(version, range)` function.
 | 
			
		||||
 | 
			
		||||
### Coercion
 | 
			
		||||
 | 
			
		||||
* `coerce(version, options)`: Coerces a string to semver if possible
 | 
			
		||||
 | 
			
		||||
This aims to provide a very forgiving translation of a non-semver string to
 | 
			
		||||
semver. It looks for the first digit in a string, and consumes all
 | 
			
		||||
remaining characters which satisfy at least a partial semver (e.g., `1`,
 | 
			
		||||
`1.2`, `1.2.3`) up to the max permitted length (256 characters).  Longer
 | 
			
		||||
versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`).  All
 | 
			
		||||
surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes
 | 
			
		||||
`3.4.0`).  Only text which lacks digits will fail coercion (`version one`
 | 
			
		||||
is not valid).  The maximum  length for any semver component considered for
 | 
			
		||||
coercion is 16 characters; longer components will be ignored
 | 
			
		||||
(`10000000000000000.4.7.4` becomes `4.7.4`).  The maximum value for any
 | 
			
		||||
semver component is `Integer.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value
 | 
			
		||||
components are invalid (`9999999999999999.4.7.4` is likely invalid).
 | 
			
		||||
 | 
			
		||||
If the `options.rtl` flag is set, then `coerce` will return the right-most
 | 
			
		||||
coercible tuple that does not share an ending index with a longer coercible
 | 
			
		||||
tuple.  For example, `1.2.3.4` will return `2.3.4` in rtl mode, not
 | 
			
		||||
`4.0.0`.  `1.2.3/4` will return `4.0.0`, because the `4` is not a part of
 | 
			
		||||
any other overlapping SemVer tuple.
 | 
			
		||||
 | 
			
		||||
### Clean
 | 
			
		||||
 | 
			
		||||
* `clean(version)`: Clean a string to be a valid semver if possible
 | 
			
		||||
 | 
			
		||||
This will return a cleaned and trimmed semver version. If the provided version is not valid a null will be returned. This does not work for ranges. 
 | 
			
		||||
 | 
			
		||||
ex.
 | 
			
		||||
* `s.clean(' = v 2.1.5foo')`: `null`
 | 
			
		||||
* `s.clean(' = v 2.1.5foo', { loose: true })`: `'2.1.5-foo'`
 | 
			
		||||
* `s.clean(' = v 2.1.5-foo')`: `null`
 | 
			
		||||
* `s.clean(' = v 2.1.5-foo', { loose: true })`: `'2.1.5-foo'`
 | 
			
		||||
* `s.clean('=v2.1.5')`: `'2.1.5'`
 | 
			
		||||
* `s.clean('  =v2.1.5')`: `2.1.5`
 | 
			
		||||
* `s.clean('      2.1.5   ')`: `'2.1.5'`
 | 
			
		||||
* `s.clean('~1.0.0')`: `null`
 | 
			
		||||
							
								
								
									
										174
									
								
								node_modules/semver/bin/semver.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										174
									
								
								node_modules/semver/bin/semver.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,174 +0,0 @@
 | 
			
		||||
#!/usr/bin/env node
 | 
			
		||||
// Standalone semver comparison program.
 | 
			
		||||
// Exits successfully and prints matching version(s) if
 | 
			
		||||
// any supplied version is valid and passes all tests.
 | 
			
		||||
 | 
			
		||||
var argv = process.argv.slice(2)
 | 
			
		||||
 | 
			
		||||
var versions = []
 | 
			
		||||
 | 
			
		||||
var range = []
 | 
			
		||||
 | 
			
		||||
var inc = null
 | 
			
		||||
 | 
			
		||||
var version = require('../package.json').version
 | 
			
		||||
 | 
			
		||||
var loose = false
 | 
			
		||||
 | 
			
		||||
var includePrerelease = false
 | 
			
		||||
 | 
			
		||||
var coerce = false
 | 
			
		||||
 | 
			
		||||
var rtl = false
 | 
			
		||||
 | 
			
		||||
var identifier
 | 
			
		||||
 | 
			
		||||
var semver = require('../semver')
 | 
			
		||||
 | 
			
		||||
var reverse = false
 | 
			
		||||
 | 
			
		||||
var options = {}
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
 | 
			
		||||
function main () {
 | 
			
		||||
  if (!argv.length) return help()
 | 
			
		||||
  while (argv.length) {
 | 
			
		||||
    var a = argv.shift()
 | 
			
		||||
    var indexOfEqualSign = a.indexOf('=')
 | 
			
		||||
    if (indexOfEqualSign !== -1) {
 | 
			
		||||
      a = a.slice(0, indexOfEqualSign)
 | 
			
		||||
      argv.unshift(a.slice(indexOfEqualSign + 1))
 | 
			
		||||
    }
 | 
			
		||||
    switch (a) {
 | 
			
		||||
      case '-rv': case '-rev': case '--rev': case '--reverse':
 | 
			
		||||
        reverse = true
 | 
			
		||||
        break
 | 
			
		||||
      case '-l': case '--loose':
 | 
			
		||||
        loose = true
 | 
			
		||||
        break
 | 
			
		||||
      case '-p': case '--include-prerelease':
 | 
			
		||||
        includePrerelease = true
 | 
			
		||||
        break
 | 
			
		||||
      case '-v': case '--version':
 | 
			
		||||
        versions.push(argv.shift())
 | 
			
		||||
        break
 | 
			
		||||
      case '-i': case '--inc': case '--increment':
 | 
			
		||||
        switch (argv[0]) {
 | 
			
		||||
          case 'major': case 'minor': case 'patch': case 'prerelease':
 | 
			
		||||
          case 'premajor': case 'preminor': case 'prepatch':
 | 
			
		||||
            inc = argv.shift()
 | 
			
		||||
            break
 | 
			
		||||
          default:
 | 
			
		||||
            inc = 'patch'
 | 
			
		||||
            break
 | 
			
		||||
        }
 | 
			
		||||
        break
 | 
			
		||||
      case '--preid':
 | 
			
		||||
        identifier = argv.shift()
 | 
			
		||||
        break
 | 
			
		||||
      case '-r': case '--range':
 | 
			
		||||
        range.push(argv.shift())
 | 
			
		||||
        break
 | 
			
		||||
      case '-c': case '--coerce':
 | 
			
		||||
        coerce = true
 | 
			
		||||
        break
 | 
			
		||||
      case '--rtl':
 | 
			
		||||
        rtl = true
 | 
			
		||||
        break
 | 
			
		||||
      case '--ltr':
 | 
			
		||||
        rtl = false
 | 
			
		||||
        break
 | 
			
		||||
      case '-h': case '--help': case '-?':
 | 
			
		||||
        return help()
 | 
			
		||||
      default:
 | 
			
		||||
        versions.push(a)
 | 
			
		||||
        break
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl }
 | 
			
		||||
 | 
			
		||||
  versions = versions.map(function (v) {
 | 
			
		||||
    return coerce ? (semver.coerce(v, options) || { version: v }).version : v
 | 
			
		||||
  }).filter(function (v) {
 | 
			
		||||
    return semver.valid(v)
 | 
			
		||||
  })
 | 
			
		||||
  if (!versions.length) return fail()
 | 
			
		||||
  if (inc && (versions.length !== 1 || range.length)) { return failInc() }
 | 
			
		||||
 | 
			
		||||
  for (var i = 0, l = range.length; i < l; i++) {
 | 
			
		||||
    versions = versions.filter(function (v) {
 | 
			
		||||
      return semver.satisfies(v, range[i], options)
 | 
			
		||||
    })
 | 
			
		||||
    if (!versions.length) return fail()
 | 
			
		||||
  }
 | 
			
		||||
  return success(versions)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function failInc () {
 | 
			
		||||
  console.error('--inc can only be used on a single version with no range')
 | 
			
		||||
  fail()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function fail () { process.exit(1) }
 | 
			
		||||
 | 
			
		||||
function success () {
 | 
			
		||||
  var compare = reverse ? 'rcompare' : 'compare'
 | 
			
		||||
  versions.sort(function (a, b) {
 | 
			
		||||
    return semver[compare](a, b, options)
 | 
			
		||||
  }).map(function (v) {
 | 
			
		||||
    return semver.clean(v, options)
 | 
			
		||||
  }).map(function (v) {
 | 
			
		||||
    return inc ? semver.inc(v, inc, options, identifier) : v
 | 
			
		||||
  }).forEach(function (v, i, _) { console.log(v) })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function help () {
 | 
			
		||||
  console.log(['SemVer ' + version,
 | 
			
		||||
    '',
 | 
			
		||||
    'A JavaScript implementation of the https://semver.org/ specification',
 | 
			
		||||
    'Copyright Isaac Z. Schlueter',
 | 
			
		||||
    '',
 | 
			
		||||
    'Usage: semver [options] <version> [<version> [...]]',
 | 
			
		||||
    'Prints valid versions sorted by SemVer precedence',
 | 
			
		||||
    '',
 | 
			
		||||
    'Options:',
 | 
			
		||||
    '-r --range <range>',
 | 
			
		||||
    '        Print versions that match the specified range.',
 | 
			
		||||
    '',
 | 
			
		||||
    '-i --increment [<level>]',
 | 
			
		||||
    '        Increment a version by the specified level.  Level can',
 | 
			
		||||
    '        be one of: major, minor, patch, premajor, preminor,',
 | 
			
		||||
    "        prepatch, or prerelease.  Default level is 'patch'.",
 | 
			
		||||
    '        Only one version may be specified.',
 | 
			
		||||
    '',
 | 
			
		||||
    '--preid <identifier>',
 | 
			
		||||
    '        Identifier to be used to prefix premajor, preminor,',
 | 
			
		||||
    '        prepatch or prerelease version increments.',
 | 
			
		||||
    '',
 | 
			
		||||
    '-l --loose',
 | 
			
		||||
    '        Interpret versions and ranges loosely',
 | 
			
		||||
    '',
 | 
			
		||||
    '-p --include-prerelease',
 | 
			
		||||
    '        Always include prerelease versions in range matching',
 | 
			
		||||
    '',
 | 
			
		||||
    '-c --coerce',
 | 
			
		||||
    '        Coerce a string into SemVer if possible',
 | 
			
		||||
    '        (does not imply --loose)',
 | 
			
		||||
    '',
 | 
			
		||||
    '--rtl',
 | 
			
		||||
    '        Coerce version strings right to left',
 | 
			
		||||
    '',
 | 
			
		||||
    '--ltr',
 | 
			
		||||
    '        Coerce version strings left to right (default)',
 | 
			
		||||
    '',
 | 
			
		||||
    'Program exits successfully if any valid version satisfies',
 | 
			
		||||
    'all supplied ranges, and prints all satisfying versions.',
 | 
			
		||||
    '',
 | 
			
		||||
    'If no satisfying versions are found, then exits failure.',
 | 
			
		||||
    '',
 | 
			
		||||
    'Versions are printed in ascending order, so supplying',
 | 
			
		||||
    'multiple versions to the utility will just sort them.'
 | 
			
		||||
  ].join('\n'))
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										62
									
								
								node_modules/semver/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								node_modules/semver/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,62 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "_from": "semver@^6.1.1",
 | 
			
		||||
  "_id": "semver@6.3.0",
 | 
			
		||||
  "_inBundle": false,
 | 
			
		||||
  "_integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
 | 
			
		||||
  "_location": "/semver",
 | 
			
		||||
  "_phantomChildren": {},
 | 
			
		||||
  "_requested": {
 | 
			
		||||
    "type": "range",
 | 
			
		||||
    "registry": true,
 | 
			
		||||
    "raw": "semver@^6.1.1",
 | 
			
		||||
    "name": "semver",
 | 
			
		||||
    "escapedName": "semver",
 | 
			
		||||
    "rawSpec": "^6.1.1",
 | 
			
		||||
    "saveSpec": null,
 | 
			
		||||
    "fetchSpec": "^6.1.1"
 | 
			
		||||
  },
 | 
			
		||||
  "_requiredBy": [
 | 
			
		||||
    "/",
 | 
			
		||||
    "/@actions/tool-cache",
 | 
			
		||||
    "/istanbul-lib-instrument"
 | 
			
		||||
  ],
 | 
			
		||||
  "_resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
 | 
			
		||||
  "_shasum": "ee0a64c8af5e8ceea67687b133761e1becbd1d3d",
 | 
			
		||||
  "_spec": "semver@^6.1.1",
 | 
			
		||||
  "_where": "E:\\github\\setup-python",
 | 
			
		||||
  "bin": {
 | 
			
		||||
    "semver": "./bin/semver.js"
 | 
			
		||||
  },
 | 
			
		||||
  "bugs": {
 | 
			
		||||
    "url": "https://github.com/npm/node-semver/issues"
 | 
			
		||||
  },
 | 
			
		||||
  "bundleDependencies": false,
 | 
			
		||||
  "deprecated": false,
 | 
			
		||||
  "description": "The semantic version parser used by npm.",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "tap": "^14.3.1"
 | 
			
		||||
  },
 | 
			
		||||
  "files": [
 | 
			
		||||
    "bin",
 | 
			
		||||
    "range.bnf",
 | 
			
		||||
    "semver.js"
 | 
			
		||||
  ],
 | 
			
		||||
  "homepage": "https://github.com/npm/node-semver#readme",
 | 
			
		||||
  "license": "ISC",
 | 
			
		||||
  "main": "semver.js",
 | 
			
		||||
  "name": "semver",
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git+https://github.com/npm/node-semver.git"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "postpublish": "git push origin --follow-tags",
 | 
			
		||||
    "postversion": "npm publish",
 | 
			
		||||
    "preversion": "npm test",
 | 
			
		||||
    "test": "tap"
 | 
			
		||||
  },
 | 
			
		||||
  "tap": {
 | 
			
		||||
    "check-coverage": true
 | 
			
		||||
  },
 | 
			
		||||
  "version": "6.3.0"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								node_modules/semver/range.bnf
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								node_modules/semver/range.bnf
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,16 +0,0 @@
 | 
			
		||||
range-set  ::= range ( logical-or range ) *
 | 
			
		||||
logical-or ::= ( ' ' ) * '||' ( ' ' ) *
 | 
			
		||||
range      ::= hyphen | simple ( ' ' simple ) * | ''
 | 
			
		||||
hyphen     ::= partial ' - ' partial
 | 
			
		||||
simple     ::= primitive | partial | tilde | caret
 | 
			
		||||
primitive  ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
 | 
			
		||||
partial    ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
 | 
			
		||||
xr         ::= 'x' | 'X' | '*' | nr
 | 
			
		||||
nr         ::= '0' | [1-9] ( [0-9] ) *
 | 
			
		||||
tilde      ::= '~' partial
 | 
			
		||||
caret      ::= '^' partial
 | 
			
		||||
qualifier  ::= ( '-' pre )? ( '+' build )?
 | 
			
		||||
pre        ::= parts
 | 
			
		||||
build      ::= parts
 | 
			
		||||
parts      ::= part ( '.' part ) *
 | 
			
		||||
part       ::= nr | [-0-9A-Za-z]+
 | 
			
		||||
							
								
								
									
										1596
									
								
								node_modules/semver/semver.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1596
									
								
								node_modules/semver/semver.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2
									
								
								node_modules/tunnel/.npmignore
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								node_modules/tunnel/.npmignore
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,2 +0,0 @@
 | 
			
		||||
/.idea
 | 
			
		||||
/node_modules
 | 
			
		||||
							
								
								
									
										13
									
								
								node_modules/tunnel/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								node_modules/tunnel/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,13 +0,0 @@
 | 
			
		||||
# Changelog
 | 
			
		||||
 | 
			
		||||
 - 0.0.4 (2016/01/23)
 | 
			
		||||
   - supported Node v0.12 or later.
 | 
			
		||||
 | 
			
		||||
 - 0.0.3 (2014/01/20)
 | 
			
		||||
   - fixed package.json
 | 
			
		||||
 | 
			
		||||
 - 0.0.1 (2012/02/18)
 | 
			
		||||
   - supported Node v0.6.x (0.6.11 or later).
 | 
			
		||||
 | 
			
		||||
 - 0.0.0 (2012/02/11)
 | 
			
		||||
   - first release.
 | 
			
		||||
							
								
								
									
										21
									
								
								node_modules/tunnel/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								node_modules/tunnel/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,21 +0,0 @@
 | 
			
		||||
The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2012 Koichi Kobayashi
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
							
								
								
									
										179
									
								
								node_modules/tunnel/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										179
									
								
								node_modules/tunnel/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,179 +0,0 @@
 | 
			
		||||
# node-tunnel - HTTP/HTTPS Agents for tunneling proxies
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var tunnel = require('tunnel');
 | 
			
		||||
 | 
			
		||||
var tunnelingAgent = tunnel.httpsOverHttp({
 | 
			
		||||
  proxy: {
 | 
			
		||||
    host: 'localhost',
 | 
			
		||||
    port: 3128
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
var req = https.request({
 | 
			
		||||
  host: 'example.com',
 | 
			
		||||
  port: 443,
 | 
			
		||||
  agent: tunnelingAgent
 | 
			
		||||
});
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
    $ npm install tunnel
 | 
			
		||||
 | 
			
		||||
## Usages
 | 
			
		||||
 | 
			
		||||
### HTTP over HTTP tunneling
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var tunnelingAgent = tunnel.httpOverHttp({
 | 
			
		||||
  maxSockets: poolSize, // Defaults to 5
 | 
			
		||||
 | 
			
		||||
  proxy: { // Proxy settings
 | 
			
		||||
    host: proxyHost, // Defaults to 'localhost'
 | 
			
		||||
    port: proxyPort, // Defaults to 80
 | 
			
		||||
    localAddress: localAddress, // Local interface if necessary
 | 
			
		||||
 | 
			
		||||
    // Basic authorization for proxy server if necessary
 | 
			
		||||
    proxyAuth: 'user:password',
 | 
			
		||||
 | 
			
		||||
    // Header fields for proxy server if necessary
 | 
			
		||||
    headers: {
 | 
			
		||||
      'User-Agent': 'Node'
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
var req = http.request({
 | 
			
		||||
  host: 'example.com',
 | 
			
		||||
  port: 80,
 | 
			
		||||
  agent: tunnelingAgent
 | 
			
		||||
});
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### HTTPS over HTTP tunneling
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var tunnelingAgent = tunnel.httpsOverHttp({
 | 
			
		||||
  maxSockets: poolSize, // Defaults to 5
 | 
			
		||||
 | 
			
		||||
  // CA for origin server if necessary
 | 
			
		||||
  ca: [ fs.readFileSync('origin-server-ca.pem')],
 | 
			
		||||
 | 
			
		||||
  // Client certification for origin server if necessary
 | 
			
		||||
  key: fs.readFileSync('origin-server-key.pem'),
 | 
			
		||||
  cert: fs.readFileSync('origin-server-cert.pem'),
 | 
			
		||||
 | 
			
		||||
  proxy: { // Proxy settings
 | 
			
		||||
    host: proxyHost, // Defaults to 'localhost'
 | 
			
		||||
    port: proxyPort, // Defaults to 80
 | 
			
		||||
    localAddress: localAddress, // Local interface if necessary
 | 
			
		||||
 | 
			
		||||
    // Basic authorization for proxy server if necessary
 | 
			
		||||
    proxyAuth: 'user:password',
 | 
			
		||||
 | 
			
		||||
    // Header fields for proxy server if necessary
 | 
			
		||||
    headers: {
 | 
			
		||||
      'User-Agent': 'Node'
 | 
			
		||||
    },
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
var req = https.request({
 | 
			
		||||
  host: 'example.com',
 | 
			
		||||
  port: 443,
 | 
			
		||||
  agent: tunnelingAgent
 | 
			
		||||
});
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### HTTP over HTTPS tunneling
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var tunnelingAgent = tunnel.httpOverHttps({
 | 
			
		||||
  maxSockets: poolSize, // Defaults to 5
 | 
			
		||||
 | 
			
		||||
  proxy: { // Proxy settings
 | 
			
		||||
    host: proxyHost, // Defaults to 'localhost'
 | 
			
		||||
    port: proxyPort, // Defaults to 443
 | 
			
		||||
    localAddress: localAddress, // Local interface if necessary
 | 
			
		||||
 | 
			
		||||
    // Basic authorization for proxy server if necessary
 | 
			
		||||
    proxyAuth: 'user:password',
 | 
			
		||||
 | 
			
		||||
    // Header fields for proxy server if necessary
 | 
			
		||||
    headers: {
 | 
			
		||||
      'User-Agent': 'Node'
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // CA for proxy server if necessary
 | 
			
		||||
    ca: [ fs.readFileSync('origin-server-ca.pem')],
 | 
			
		||||
 | 
			
		||||
    // Server name for verification if necessary
 | 
			
		||||
    servername: 'example.com',
 | 
			
		||||
 | 
			
		||||
    // Client certification for proxy server if necessary
 | 
			
		||||
    key: fs.readFileSync('origin-server-key.pem'),
 | 
			
		||||
    cert: fs.readFileSync('origin-server-cert.pem'),
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
var req = http.request({
 | 
			
		||||
  host: 'example.com',
 | 
			
		||||
  port: 80,
 | 
			
		||||
  agent: tunnelingAgent
 | 
			
		||||
});
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### HTTPS over HTTPS tunneling
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var tunnelingAgent = tunnel.httpsOverHttps({
 | 
			
		||||
  maxSockets: poolSize, // Defaults to 5
 | 
			
		||||
 | 
			
		||||
  // CA for origin server if necessary
 | 
			
		||||
  ca: [ fs.readFileSync('origin-server-ca.pem')],
 | 
			
		||||
 | 
			
		||||
  // Client certification for origin server if necessary
 | 
			
		||||
  key: fs.readFileSync('origin-server-key.pem'),
 | 
			
		||||
  cert: fs.readFileSync('origin-server-cert.pem'),
 | 
			
		||||
 | 
			
		||||
  proxy: { // Proxy settings
 | 
			
		||||
    host: proxyHost, // Defaults to 'localhost'
 | 
			
		||||
    port: proxyPort, // Defaults to 443
 | 
			
		||||
    localAddress: localAddress, // Local interface if necessary
 | 
			
		||||
 | 
			
		||||
    // Basic authorization for proxy server if necessary
 | 
			
		||||
    proxyAuth: 'user:password',
 | 
			
		||||
 | 
			
		||||
    // Header fields for proxy server if necessary
 | 
			
		||||
    headers: {
 | 
			
		||||
      'User-Agent': 'Node'
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // CA for proxy server if necessary
 | 
			
		||||
    ca: [ fs.readFileSync('origin-server-ca.pem')],
 | 
			
		||||
 | 
			
		||||
    // Server name for verification if necessary
 | 
			
		||||
    servername: 'example.com',
 | 
			
		||||
 | 
			
		||||
    // Client certification for proxy server if necessary
 | 
			
		||||
    key: fs.readFileSync('origin-server-key.pem'),
 | 
			
		||||
    cert: fs.readFileSync('origin-server-cert.pem'),
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
var req = https.request({
 | 
			
		||||
  host: 'example.com',
 | 
			
		||||
  port: 443,
 | 
			
		||||
  agent: tunnelingAgent
 | 
			
		||||
});
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## CONTRIBUTORS
 | 
			
		||||
* [Aleksis Brezas (abresas)](https://github.com/abresas)
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
Licensed under the [MIT](https://github.com/koichik/node-tunnel/blob/master/LICENSE) license.
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/tunnel/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/tunnel/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
module.exports = require('./lib/tunnel');
 | 
			
		||||
							
								
								
									
										247
									
								
								node_modules/tunnel/lib/tunnel.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										247
									
								
								node_modules/tunnel/lib/tunnel.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,247 +0,0 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var net = require('net');
 | 
			
		||||
var tls = require('tls');
 | 
			
		||||
var http = require('http');
 | 
			
		||||
var https = require('https');
 | 
			
		||||
var events = require('events');
 | 
			
		||||
var assert = require('assert');
 | 
			
		||||
var util = require('util');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
exports.httpOverHttp = httpOverHttp;
 | 
			
		||||
exports.httpsOverHttp = httpsOverHttp;
 | 
			
		||||
exports.httpOverHttps = httpOverHttps;
 | 
			
		||||
exports.httpsOverHttps = httpsOverHttps;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function httpOverHttp(options) {
 | 
			
		||||
  var agent = new TunnelingAgent(options);
 | 
			
		||||
  agent.request = http.request;
 | 
			
		||||
  return agent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function httpsOverHttp(options) {
 | 
			
		||||
  var agent = new TunnelingAgent(options);
 | 
			
		||||
  agent.request = http.request;
 | 
			
		||||
  agent.createSocket = createSecureSocket;
 | 
			
		||||
  return agent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function httpOverHttps(options) {
 | 
			
		||||
  var agent = new TunnelingAgent(options);
 | 
			
		||||
  agent.request = https.request;
 | 
			
		||||
  return agent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function httpsOverHttps(options) {
 | 
			
		||||
  var agent = new TunnelingAgent(options);
 | 
			
		||||
  agent.request = https.request;
 | 
			
		||||
  agent.createSocket = createSecureSocket;
 | 
			
		||||
  return agent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function TunnelingAgent(options) {
 | 
			
		||||
  var self = this;
 | 
			
		||||
  self.options = options || {};
 | 
			
		||||
  self.proxyOptions = self.options.proxy || {};
 | 
			
		||||
  self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;
 | 
			
		||||
  self.requests = [];
 | 
			
		||||
  self.sockets = [];
 | 
			
		||||
 | 
			
		||||
  self.on('free', function onFree(socket, host, port, localAddress) {
 | 
			
		||||
    var options = toOptions(host, port, localAddress);
 | 
			
		||||
    for (var i = 0, len = self.requests.length; i < len; ++i) {
 | 
			
		||||
      var pending = self.requests[i];
 | 
			
		||||
      if (pending.host === options.host && pending.port === options.port) {
 | 
			
		||||
        // Detect the request to connect same origin server,
 | 
			
		||||
        // reuse the connection.
 | 
			
		||||
        self.requests.splice(i, 1);
 | 
			
		||||
        pending.request.onSocket(socket);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    socket.destroy();
 | 
			
		||||
    self.removeSocket(socket);
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
util.inherits(TunnelingAgent, events.EventEmitter);
 | 
			
		||||
 | 
			
		||||
TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {
 | 
			
		||||
  var self = this;
 | 
			
		||||
  var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));
 | 
			
		||||
 | 
			
		||||
  if (self.sockets.length >= this.maxSockets) {
 | 
			
		||||
    // We are over limit so we'll add it to the queue.
 | 
			
		||||
    self.requests.push(options);
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // If we are under maxSockets create a new one.
 | 
			
		||||
  self.createSocket(options, function(socket) {
 | 
			
		||||
    socket.on('free', onFree);
 | 
			
		||||
    socket.on('close', onCloseOrRemove);
 | 
			
		||||
    socket.on('agentRemove', onCloseOrRemove);
 | 
			
		||||
    req.onSocket(socket);
 | 
			
		||||
 | 
			
		||||
    function onFree() {
 | 
			
		||||
      self.emit('free', socket, options);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function onCloseOrRemove(err) {
 | 
			
		||||
      self.removeSocket(socket);
 | 
			
		||||
      socket.removeListener('free', onFree);
 | 
			
		||||
      socket.removeListener('close', onCloseOrRemove);
 | 
			
		||||
      socket.removeListener('agentRemove', onCloseOrRemove);
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
 | 
			
		||||
  var self = this;
 | 
			
		||||
  var placeholder = {};
 | 
			
		||||
  self.sockets.push(placeholder);
 | 
			
		||||
 | 
			
		||||
  var connectOptions = mergeOptions({}, self.proxyOptions, {
 | 
			
		||||
    method: 'CONNECT',
 | 
			
		||||
    path: options.host + ':' + options.port,
 | 
			
		||||
    agent: false
 | 
			
		||||
  });
 | 
			
		||||
  if (connectOptions.proxyAuth) {
 | 
			
		||||
    connectOptions.headers = connectOptions.headers || {};
 | 
			
		||||
    connectOptions.headers['Proxy-Authorization'] = 'Basic ' +
 | 
			
		||||
        new Buffer(connectOptions.proxyAuth).toString('base64');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  debug('making CONNECT request');
 | 
			
		||||
  var connectReq = self.request(connectOptions);
 | 
			
		||||
  connectReq.useChunkedEncodingByDefault = false; // for v0.6
 | 
			
		||||
  connectReq.once('response', onResponse); // for v0.6
 | 
			
		||||
  connectReq.once('upgrade', onUpgrade);   // for v0.6
 | 
			
		||||
  connectReq.once('connect', onConnect);   // for v0.7 or later
 | 
			
		||||
  connectReq.once('error', onError);
 | 
			
		||||
  connectReq.end();
 | 
			
		||||
 | 
			
		||||
  function onResponse(res) {
 | 
			
		||||
    // Very hacky. This is necessary to avoid http-parser leaks.
 | 
			
		||||
    res.upgrade = true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function onUpgrade(res, socket, head) {
 | 
			
		||||
    // Hacky.
 | 
			
		||||
    process.nextTick(function() {
 | 
			
		||||
      onConnect(res, socket, head);
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function onConnect(res, socket, head) {
 | 
			
		||||
    connectReq.removeAllListeners();
 | 
			
		||||
    socket.removeAllListeners();
 | 
			
		||||
 | 
			
		||||
    if (res.statusCode === 200) {
 | 
			
		||||
      assert.equal(head.length, 0);
 | 
			
		||||
      debug('tunneling connection has established');
 | 
			
		||||
      self.sockets[self.sockets.indexOf(placeholder)] = socket;
 | 
			
		||||
      cb(socket);
 | 
			
		||||
    } else {
 | 
			
		||||
      debug('tunneling socket could not be established, statusCode=%d',
 | 
			
		||||
            res.statusCode);
 | 
			
		||||
      var error = new Error('tunneling socket could not be established, ' +
 | 
			
		||||
                            'statusCode=' + res.statusCode);
 | 
			
		||||
      error.code = 'ECONNRESET';
 | 
			
		||||
      options.request.emit('error', error);
 | 
			
		||||
      self.removeSocket(placeholder);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function onError(cause) {
 | 
			
		||||
    connectReq.removeAllListeners();
 | 
			
		||||
 | 
			
		||||
    debug('tunneling socket could not be established, cause=%s\n',
 | 
			
		||||
          cause.message, cause.stack);
 | 
			
		||||
    var error = new Error('tunneling socket could not be established, ' +
 | 
			
		||||
                          'cause=' + cause.message);
 | 
			
		||||
    error.code = 'ECONNRESET';
 | 
			
		||||
    options.request.emit('error', error);
 | 
			
		||||
    self.removeSocket(placeholder);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
 | 
			
		||||
  var pos = this.sockets.indexOf(socket)
 | 
			
		||||
  if (pos === -1) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  this.sockets.splice(pos, 1);
 | 
			
		||||
 | 
			
		||||
  var pending = this.requests.shift();
 | 
			
		||||
  if (pending) {
 | 
			
		||||
    // If we have pending requests and a socket gets closed a new one
 | 
			
		||||
    // needs to be created to take over in the pool for the one that closed.
 | 
			
		||||
    this.createSocket(pending, function(socket) {
 | 
			
		||||
      pending.request.onSocket(socket);
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function createSecureSocket(options, cb) {
 | 
			
		||||
  var self = this;
 | 
			
		||||
  TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {
 | 
			
		||||
    var hostHeader = options.request.getHeader('host');
 | 
			
		||||
    var tlsOptions = mergeOptions({}, self.options, {
 | 
			
		||||
      socket: socket,
 | 
			
		||||
      servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // 0 is dummy port for v0.6
 | 
			
		||||
    var secureSocket = tls.connect(0, tlsOptions);
 | 
			
		||||
    self.sockets[self.sockets.indexOf(socket)] = secureSocket;
 | 
			
		||||
    cb(secureSocket);
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function toOptions(host, port, localAddress) {
 | 
			
		||||
  if (typeof host === 'string') { // since v0.10
 | 
			
		||||
    return {
 | 
			
		||||
      host: host,
 | 
			
		||||
      port: port,
 | 
			
		||||
      localAddress: localAddress
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  return host; // for v0.11 or later
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function mergeOptions(target) {
 | 
			
		||||
  for (var i = 1, len = arguments.length; i < len; ++i) {
 | 
			
		||||
    var overrides = arguments[i];
 | 
			
		||||
    if (typeof overrides === 'object') {
 | 
			
		||||
      var keys = Object.keys(overrides);
 | 
			
		||||
      for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {
 | 
			
		||||
        var k = keys[j];
 | 
			
		||||
        if (overrides[k] !== undefined) {
 | 
			
		||||
          target[k] = overrides[k];
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return target;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
var debug;
 | 
			
		||||
if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
 | 
			
		||||
  debug = function() {
 | 
			
		||||
    var args = Array.prototype.slice.call(arguments);
 | 
			
		||||
    if (typeof args[0] === 'string') {
 | 
			
		||||
      args[0] = 'TUNNEL: ' + args[0];
 | 
			
		||||
    } else {
 | 
			
		||||
      args.unshift('TUNNEL:');
 | 
			
		||||
    }
 | 
			
		||||
    console.error.apply(console, args);
 | 
			
		||||
  }
 | 
			
		||||
} else {
 | 
			
		||||
  debug = function() {};
 | 
			
		||||
}
 | 
			
		||||
exports.debug = debug; // for test
 | 
			
		||||
							
								
								
									
										64
									
								
								node_modules/tunnel/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										64
									
								
								node_modules/tunnel/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,64 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "_from": "tunnel@0.0.4",
 | 
			
		||||
  "_id": "tunnel@0.0.4",
 | 
			
		||||
  "_inBundle": false,
 | 
			
		||||
  "_integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=",
 | 
			
		||||
  "_location": "/tunnel",
 | 
			
		||||
  "_phantomChildren": {},
 | 
			
		||||
  "_requested": {
 | 
			
		||||
    "type": "version",
 | 
			
		||||
    "registry": true,
 | 
			
		||||
    "raw": "tunnel@0.0.4",
 | 
			
		||||
    "name": "tunnel",
 | 
			
		||||
    "escapedName": "tunnel",
 | 
			
		||||
    "rawSpec": "0.0.4",
 | 
			
		||||
    "saveSpec": null,
 | 
			
		||||
    "fetchSpec": "0.0.4"
 | 
			
		||||
  },
 | 
			
		||||
  "_requiredBy": [
 | 
			
		||||
    "/typed-rest-client"
 | 
			
		||||
  ],
 | 
			
		||||
  "_resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz",
 | 
			
		||||
  "_shasum": "2d3785a158c174c9a16dc2c046ec5fc5f1742213",
 | 
			
		||||
  "_spec": "tunnel@0.0.4",
 | 
			
		||||
  "_where": "E:\\github\\setup-python\\node_modules\\typed-rest-client",
 | 
			
		||||
  "author": {
 | 
			
		||||
    "name": "Koichi Kobayashi",
 | 
			
		||||
    "email": "koichik@improvement.jp"
 | 
			
		||||
  },
 | 
			
		||||
  "bugs": {
 | 
			
		||||
    "url": "https://github.com/koichik/node-tunnel/issues"
 | 
			
		||||
  },
 | 
			
		||||
  "bundleDependencies": false,
 | 
			
		||||
  "deprecated": false,
 | 
			
		||||
  "description": "Node HTTP/HTTPS Agents for tunneling proxies",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "mocha": "*",
 | 
			
		||||
    "should": "*"
 | 
			
		||||
  },
 | 
			
		||||
  "directories": {
 | 
			
		||||
    "lib": "./lib"
 | 
			
		||||
  },
 | 
			
		||||
  "engines": {
 | 
			
		||||
    "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
 | 
			
		||||
  },
 | 
			
		||||
  "homepage": "https://github.com/koichik/node-tunnel/",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "http",
 | 
			
		||||
    "https",
 | 
			
		||||
    "agent",
 | 
			
		||||
    "proxy",
 | 
			
		||||
    "tunnel"
 | 
			
		||||
  ],
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "main": "./index.js",
 | 
			
		||||
  "name": "tunnel",
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git+https://github.com/koichik/node-tunnel.git"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "./node_modules/mocha/bin/mocha"
 | 
			
		||||
  },
 | 
			
		||||
  "version": "0.0.4"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										108
									
								
								node_modules/tunnel/test/http-over-http.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										108
									
								
								node_modules/tunnel/test/http-over-http.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,108 +0,0 @@
 | 
			
		||||
var http = require('http');
 | 
			
		||||
var net = require('net');
 | 
			
		||||
var should = require('should');
 | 
			
		||||
var tunnel = require('../index');
 | 
			
		||||
 | 
			
		||||
describe('HTTP over HTTP', function() {
 | 
			
		||||
  it('should finish without error', function(done) {
 | 
			
		||||
    var serverPort = 3000;
 | 
			
		||||
    var proxyPort = 3001;
 | 
			
		||||
    var poolSize = 3;
 | 
			
		||||
    var N = 10;
 | 
			
		||||
    var serverConnect = 0;
 | 
			
		||||
    var proxyConnect = 0;
 | 
			
		||||
    var clientConnect = 0;
 | 
			
		||||
    var server;
 | 
			
		||||
    var proxy;
 | 
			
		||||
    var agent;
 | 
			
		||||
    
 | 
			
		||||
    server = http.createServer(function(req, res) {
 | 
			
		||||
      tunnel.debug('SERVER: got request');
 | 
			
		||||
      ++serverConnect;
 | 
			
		||||
      res.writeHead(200);
 | 
			
		||||
      res.end('Hello' + req.url);
 | 
			
		||||
      tunnel.debug('SERVER: sending response');
 | 
			
		||||
    });
 | 
			
		||||
    server.listen(serverPort, setupProxy);
 | 
			
		||||
 | 
			
		||||
    function setupProxy() {
 | 
			
		||||
      proxy = http.createServer(function(req, res) {
 | 
			
		||||
        should.fail();
 | 
			
		||||
      });
 | 
			
		||||
      proxy.on('upgrade', onConnect); // for v0.6
 | 
			
		||||
      proxy.on('connect', onConnect); // for v0.7 or later
 | 
			
		||||
 | 
			
		||||
      function onConnect(req, clientSocket, head) {
 | 
			
		||||
        tunnel.debug('PROXY: got CONNECT request');
 | 
			
		||||
 | 
			
		||||
        req.method.should.equal('CONNECT');
 | 
			
		||||
        req.url.should.equal('localhost:' + serverPort);
 | 
			
		||||
        req.headers.should.not.have.property('transfer-encoding');
 | 
			
		||||
        req.headers.should.have.property('proxy-authorization',
 | 
			
		||||
            'Basic ' + new Buffer('user:password').toString('base64'));
 | 
			
		||||
        ++proxyConnect;
 | 
			
		||||
    
 | 
			
		||||
        tunnel.debug('PROXY: creating a tunnel');
 | 
			
		||||
        var serverSocket = net.connect(serverPort, function() {
 | 
			
		||||
          tunnel.debug('PROXY: replying to client CONNECT request');
 | 
			
		||||
          clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n');
 | 
			
		||||
          clientSocket.pipe(serverSocket);
 | 
			
		||||
          serverSocket.write(head);
 | 
			
		||||
          serverSocket.pipe(clientSocket);
 | 
			
		||||
          // workaround, see joyent/node#2524
 | 
			
		||||
          serverSocket.on('end', function() {
 | 
			
		||||
            clientSocket.end();
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
      proxy.listen(proxyPort, setupClient);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function setupClient() {
 | 
			
		||||
      agent = tunnel.httpOverHttp({
 | 
			
		||||
        maxSockets: poolSize,
 | 
			
		||||
        proxy: {
 | 
			
		||||
          port: proxyPort,
 | 
			
		||||
          proxyAuth: 'user:password'
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      for (var i = 0; i < N; ++i) {
 | 
			
		||||
        doClientRequest(i);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      function doClientRequest(i) {
 | 
			
		||||
        tunnel.debug('CLIENT: Making HTTP request (%d)', i);
 | 
			
		||||
        var req = http.get({
 | 
			
		||||
          port: serverPort,
 | 
			
		||||
          path: '/' + i,
 | 
			
		||||
          agent: agent
 | 
			
		||||
        }, function(res) {
 | 
			
		||||
          tunnel.debug('CLIENT: got HTTP response (%d)', i);
 | 
			
		||||
          res.setEncoding('utf8');
 | 
			
		||||
          res.on('data', function(data) {
 | 
			
		||||
            data.should.equal('Hello/' + i);
 | 
			
		||||
          });
 | 
			
		||||
          res.on('end', function() {
 | 
			
		||||
            ++clientConnect;
 | 
			
		||||
            if (clientConnect === N) {
 | 
			
		||||
              proxy.close();
 | 
			
		||||
              server.close();
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    server.on('close', function() {
 | 
			
		||||
      serverConnect.should.equal(N);
 | 
			
		||||
      proxyConnect.should.equal(poolSize);
 | 
			
		||||
      clientConnect.should.equal(N);
 | 
			
		||||
    
 | 
			
		||||
      agent.sockets.should.be.empty;
 | 
			
		||||
      agent.requests.should.be.empty;
 | 
			
		||||
  
 | 
			
		||||
      done();
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										130
									
								
								node_modules/tunnel/test/http-over-https.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										130
									
								
								node_modules/tunnel/test/http-over-https.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,130 +0,0 @@
 | 
			
		||||
var http = require('http');
 | 
			
		||||
var https = require('https');
 | 
			
		||||
var net = require('net');
 | 
			
		||||
var fs = require('fs');
 | 
			
		||||
var path = require('path');
 | 
			
		||||
var should = require('should');
 | 
			
		||||
var tunnel = require('../index');
 | 
			
		||||
 | 
			
		||||
function readPem(file) {
 | 
			
		||||
  return fs.readFileSync(path.join('test/keys', file + '.pem'));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var proxyKey = readPem('proxy1-key');
 | 
			
		||||
var proxyCert = readPem('proxy1-cert');
 | 
			
		||||
var proxyCA = readPem('ca2-cert');
 | 
			
		||||
var clientKey = readPem('client1-key');
 | 
			
		||||
var clientCert = readPem('client1-cert');
 | 
			
		||||
var clientCA = readPem('ca3-cert');
 | 
			
		||||
 | 
			
		||||
describe('HTTP over HTTPS', function() {
 | 
			
		||||
  it('should finish without error', function(done) {
 | 
			
		||||
    var serverPort = 3004;
 | 
			
		||||
    var proxyPort = 3005;
 | 
			
		||||
    var poolSize = 3;
 | 
			
		||||
    var N = 10;
 | 
			
		||||
    var serverConnect = 0;
 | 
			
		||||
    var proxyConnect = 0;
 | 
			
		||||
    var clientConnect = 0;
 | 
			
		||||
    var server;
 | 
			
		||||
    var proxy;
 | 
			
		||||
    var agent;
 | 
			
		||||
 | 
			
		||||
    server = http.createServer(function(req, res) {
 | 
			
		||||
      tunnel.debug('SERVER: got request');
 | 
			
		||||
      ++serverConnect;
 | 
			
		||||
      res.writeHead(200);
 | 
			
		||||
      res.end('Hello' + req.url);
 | 
			
		||||
      tunnel.debug('SERVER: sending response');
 | 
			
		||||
    });
 | 
			
		||||
    server.listen(serverPort, setupProxy);
 | 
			
		||||
 | 
			
		||||
    function setupProxy() {
 | 
			
		||||
      proxy = https.createServer({
 | 
			
		||||
        key: proxyKey,
 | 
			
		||||
        cert: proxyCert,
 | 
			
		||||
        ca: [clientCA],
 | 
			
		||||
        requestCert: true,
 | 
			
		||||
        rejectUnauthorized: true
 | 
			
		||||
      }, function(req, res) {
 | 
			
		||||
        should.fail();
 | 
			
		||||
      });
 | 
			
		||||
      proxy.on('upgrade', onConnect); // for v0.6
 | 
			
		||||
      proxy.on('connect', onConnect); // for v0.7 or later
 | 
			
		||||
 | 
			
		||||
      function onConnect(req, clientSocket, head) {
 | 
			
		||||
        tunnel.debug('PROXY: got CONNECT request');
 | 
			
		||||
 | 
			
		||||
        req.method.should.equal('CONNECT');
 | 
			
		||||
        req.url.should.equal('localhost:' + serverPort);
 | 
			
		||||
        req.headers.should.not.have.property('transfer-encoding');
 | 
			
		||||
        ++proxyConnect;
 | 
			
		||||
 | 
			
		||||
        tunnel.debug('PROXY: creating a tunnel');
 | 
			
		||||
        var serverSocket = net.connect(serverPort, function() {
 | 
			
		||||
          tunnel.debug('PROXY: replying to client CONNECT request');
 | 
			
		||||
          clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n');
 | 
			
		||||
          clientSocket.pipe(serverSocket);
 | 
			
		||||
          serverSocket.write(head);
 | 
			
		||||
          serverSocket.pipe(clientSocket);
 | 
			
		||||
          // workaround, see joyent/node#2524
 | 
			
		||||
          serverSocket.on('end', function() {
 | 
			
		||||
            clientSocket.end();
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
      proxy.listen(proxyPort, setupClient);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function setupClient() {
 | 
			
		||||
      agent = tunnel.httpOverHttps({
 | 
			
		||||
        maxSockets: poolSize,
 | 
			
		||||
        proxy: {
 | 
			
		||||
          port: proxyPort,
 | 
			
		||||
          key: clientKey,
 | 
			
		||||
          cert: clientCert,
 | 
			
		||||
          ca: [proxyCA],
 | 
			
		||||
          rejectUnauthorized: true
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      for (var i = 0; i < N; ++i) {
 | 
			
		||||
        doClientRequest(i);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      function doClientRequest(i) {
 | 
			
		||||
        tunnel.debug('CLIENT: Making HTTP request (%d)', i);
 | 
			
		||||
        var req = http.get({
 | 
			
		||||
          port: serverPort,
 | 
			
		||||
          path: '/' + i,
 | 
			
		||||
          agent: agent
 | 
			
		||||
        }, function(res) {
 | 
			
		||||
          tunnel.debug('CLIENT: got HTTP response (%d)', i);
 | 
			
		||||
          res.setEncoding('utf8');
 | 
			
		||||
          res.on('data', function(data) {
 | 
			
		||||
            data.should.equal('Hello/' + i);
 | 
			
		||||
          });
 | 
			
		||||
          res.on('end', function() {
 | 
			
		||||
            ++clientConnect;
 | 
			
		||||
            if (clientConnect === N) {
 | 
			
		||||
              proxy.close();
 | 
			
		||||
              server.close();
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    server.on('close', function() {
 | 
			
		||||
      serverConnect.should.equal(N);
 | 
			
		||||
      proxyConnect.should.equal(poolSize);
 | 
			
		||||
      clientConnect.should.equal(N);
 | 
			
		||||
 | 
			
		||||
      var name = 'localhost:' + serverPort;
 | 
			
		||||
      agent.sockets.should.be.empty;
 | 
			
		||||
      agent.requests.should.be.empty;
 | 
			
		||||
 | 
			
		||||
      done();
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										130
									
								
								node_modules/tunnel/test/https-over-http.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										130
									
								
								node_modules/tunnel/test/https-over-http.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,130 +0,0 @@
 | 
			
		||||
var http = require('http');
 | 
			
		||||
var https = require('https');
 | 
			
		||||
var net = require('net');
 | 
			
		||||
var fs = require('fs');
 | 
			
		||||
var path = require('path');
 | 
			
		||||
var should = require('should');
 | 
			
		||||
var tunnel = require('../index');
 | 
			
		||||
 | 
			
		||||
function readPem(file) {
 | 
			
		||||
  return fs.readFileSync(path.join('test/keys', file + '.pem'));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var serverKey = readPem('server1-key');
 | 
			
		||||
var serverCert = readPem('server1-cert');
 | 
			
		||||
var serverCA = readPem('ca1-cert');
 | 
			
		||||
var clientKey = readPem('client1-key');
 | 
			
		||||
var clientCert = readPem('client1-cert');
 | 
			
		||||
var clientCA = readPem('ca3-cert');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
describe('HTTPS over HTTP', function() {
 | 
			
		||||
  it('should finish without error', function(done) {
 | 
			
		||||
    var serverPort = 3002;
 | 
			
		||||
    var proxyPort = 3003;
 | 
			
		||||
    var poolSize = 3;
 | 
			
		||||
    var N = 10;
 | 
			
		||||
    var serverConnect = 0;
 | 
			
		||||
    var proxyConnect = 0;
 | 
			
		||||
    var clientConnect = 0;
 | 
			
		||||
    var server;
 | 
			
		||||
    var proxy;
 | 
			
		||||
    var agent;
 | 
			
		||||
 | 
			
		||||
    server = https.createServer({
 | 
			
		||||
      key: serverKey,
 | 
			
		||||
      cert: serverCert,
 | 
			
		||||
      ca: [clientCA],
 | 
			
		||||
      requestCert: true,
 | 
			
		||||
      rejectUnauthorized: true
 | 
			
		||||
    }, function(req, res) {
 | 
			
		||||
      tunnel.debug('SERVER: got request');
 | 
			
		||||
      ++serverConnect;
 | 
			
		||||
      res.writeHead(200);
 | 
			
		||||
      res.end('Hello' + req.url);
 | 
			
		||||
      tunnel.debug('SERVER: sending response');
 | 
			
		||||
    });
 | 
			
		||||
    server.listen(serverPort, setupProxy);
 | 
			
		||||
 | 
			
		||||
    function setupProxy() {
 | 
			
		||||
      proxy = http.createServer(function(req, res) {
 | 
			
		||||
        should.fail();
 | 
			
		||||
      });
 | 
			
		||||
      proxy.on('upgrade', onConnect); // for v0.6
 | 
			
		||||
      proxy.on('connect', onConnect); // for v0.7 or later
 | 
			
		||||
 | 
			
		||||
      function onConnect(req, clientSocket, head) {
 | 
			
		||||
        tunnel.debug('PROXY: got CONNECT request');
 | 
			
		||||
 | 
			
		||||
        req.method.should.equal('CONNECT');
 | 
			
		||||
        req.url.should.equal('localhost:' + serverPort);
 | 
			
		||||
        req.headers.should.not.have.property('transfer-encoding');
 | 
			
		||||
        ++proxyConnect;
 | 
			
		||||
 | 
			
		||||
        var serverSocket = net.connect(serverPort, function() {
 | 
			
		||||
          tunnel.debug('PROXY: replying to client CONNECT request');
 | 
			
		||||
          clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n');
 | 
			
		||||
          clientSocket.pipe(serverSocket);
 | 
			
		||||
          serverSocket.write(head);
 | 
			
		||||
          serverSocket.pipe(clientSocket);
 | 
			
		||||
          // workaround, see joyent/node#2524
 | 
			
		||||
          serverSocket.on('end', function() {
 | 
			
		||||
            clientSocket.end();
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
      proxy.listen(proxyPort, setupClient);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function setupClient() {
 | 
			
		||||
      agent = tunnel.httpsOverHttp({
 | 
			
		||||
        maxSockets: poolSize,
 | 
			
		||||
        key: clientKey,
 | 
			
		||||
        cert: clientCert,
 | 
			
		||||
        ca: [serverCA],
 | 
			
		||||
        rejectUnauthorized: true,
 | 
			
		||||
        proxy: {
 | 
			
		||||
          port: proxyPort
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      for (var i = 0; i < N; ++i) {
 | 
			
		||||
        doClientRequest(i);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      function doClientRequest(i) {
 | 
			
		||||
        tunnel.debug('CLIENT: Making HTTPS request (%d)', i);
 | 
			
		||||
        var req = https.get({
 | 
			
		||||
          port: serverPort,
 | 
			
		||||
          path: '/' + i,
 | 
			
		||||
          agent: agent
 | 
			
		||||
        }, function(res) {
 | 
			
		||||
          tunnel.debug('CLIENT: got HTTPS response (%d)', i);
 | 
			
		||||
          res.setEncoding('utf8');
 | 
			
		||||
          res.on('data', function(data) {
 | 
			
		||||
            data.should.equal('Hello/' + i);
 | 
			
		||||
          });
 | 
			
		||||
          res.on('end', function() {
 | 
			
		||||
            ++clientConnect;
 | 
			
		||||
            if (clientConnect === N) {
 | 
			
		||||
              proxy.close();
 | 
			
		||||
              server.close();
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    server.on('close', function() {
 | 
			
		||||
      serverConnect.should.equal(N);
 | 
			
		||||
      proxyConnect.should.equal(poolSize);
 | 
			
		||||
      clientConnect.should.equal(N);
 | 
			
		||||
 | 
			
		||||
      var name = 'localhost:' + serverPort;
 | 
			
		||||
      agent.sockets.should.be.empty;
 | 
			
		||||
      agent.requests.should.be.empty;
 | 
			
		||||
 | 
			
		||||
      done();
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										261
									
								
								node_modules/tunnel/test/https-over-https-error.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										261
									
								
								node_modules/tunnel/test/https-over-https-error.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,261 +0,0 @@
 | 
			
		||||
var http = require('http');
 | 
			
		||||
var https = require('https');
 | 
			
		||||
var net = require('net');
 | 
			
		||||
var fs = require('fs');
 | 
			
		||||
var path = require('path');
 | 
			
		||||
var should = require('should');
 | 
			
		||||
var tunnel = require('../index');
 | 
			
		||||
 | 
			
		||||
function readPem(file) {
 | 
			
		||||
  return fs.readFileSync(path.join('test/keys', file + '.pem'));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var serverKey = readPem('server2-key');
 | 
			
		||||
var serverCert = readPem('server2-cert');
 | 
			
		||||
var serverCA = readPem('ca1-cert');
 | 
			
		||||
var proxyKey = readPem('proxy2-key');
 | 
			
		||||
var proxyCert = readPem('proxy2-cert');
 | 
			
		||||
var proxyCA = readPem('ca2-cert');
 | 
			
		||||
var client1Key = readPem('client1-key');
 | 
			
		||||
var client1Cert = readPem('client1-cert');
 | 
			
		||||
var client1CA = readPem('ca3-cert');
 | 
			
		||||
var client2Key = readPem('client2-key');
 | 
			
		||||
var client2Cert = readPem('client2-cert');
 | 
			
		||||
var client2CA = readPem('ca4-cert');
 | 
			
		||||
 | 
			
		||||
describe('HTTPS over HTTPS authentication failed', function() {
 | 
			
		||||
  it('should finish without error', function(done) {
 | 
			
		||||
    var serverPort = 3008;
 | 
			
		||||
    var proxyPort = 3009;
 | 
			
		||||
    var serverConnect = 0;
 | 
			
		||||
    var proxyConnect = 0;
 | 
			
		||||
    var clientRequest = 0;
 | 
			
		||||
    var clientConnect = 0;
 | 
			
		||||
    var clientError = 0;
 | 
			
		||||
    var server;
 | 
			
		||||
    var proxy;
 | 
			
		||||
 | 
			
		||||
    server = https.createServer({
 | 
			
		||||
      key: serverKey,
 | 
			
		||||
      cert: serverCert,
 | 
			
		||||
      ca: [client1CA],
 | 
			
		||||
      requestCert: true,
 | 
			
		||||
      rejectUnauthorized: true
 | 
			
		||||
    }, function(req, res) {
 | 
			
		||||
      tunnel.debug('SERVER: got request', req.url);
 | 
			
		||||
      ++serverConnect;
 | 
			
		||||
      req.on('data', function(data) {
 | 
			
		||||
      });
 | 
			
		||||
      req.on('end', function() {
 | 
			
		||||
        res.writeHead(200);
 | 
			
		||||
        res.end('Hello, ' + serverConnect);
 | 
			
		||||
        tunnel.debug('SERVER: sending response');
 | 
			
		||||
      });
 | 
			
		||||
      req.resume();
 | 
			
		||||
    });
 | 
			
		||||
    //server.addContext('server2', {
 | 
			
		||||
    //  key: serverKey,
 | 
			
		||||
    //  cert: serverCert,
 | 
			
		||||
    //  ca: [client1CA],
 | 
			
		||||
    //});
 | 
			
		||||
    server.listen(serverPort, setupProxy);
 | 
			
		||||
 | 
			
		||||
    function setupProxy() {
 | 
			
		||||
      proxy = https.createServer({
 | 
			
		||||
        key: proxyKey,
 | 
			
		||||
        cert: proxyCert,
 | 
			
		||||
        ca: [client2CA],
 | 
			
		||||
        requestCert: true,
 | 
			
		||||
        rejectUnauthorized: true
 | 
			
		||||
      }, function(req, res) {
 | 
			
		||||
        should.fail();
 | 
			
		||||
      });
 | 
			
		||||
      //proxy.addContext('proxy2', {
 | 
			
		||||
      //  key: proxyKey,
 | 
			
		||||
      //  cert: proxyCert,
 | 
			
		||||
      //  ca: [client2CA],
 | 
			
		||||
      //});
 | 
			
		||||
      proxy.on('upgrade', onConnect); // for v0.6
 | 
			
		||||
      proxy.on('connect', onConnect); // for v0.7 or later
 | 
			
		||||
 | 
			
		||||
      function onConnect(req, clientSocket, head) {
 | 
			
		||||
        req.method.should.equal('CONNECT');
 | 
			
		||||
        req.url.should.equal('localhost:' + serverPort);
 | 
			
		||||
        req.headers.should.not.have.property('transfer-encoding');
 | 
			
		||||
        ++proxyConnect;
 | 
			
		||||
 | 
			
		||||
        var serverSocket = net.connect(serverPort, function() {
 | 
			
		||||
          tunnel.debug('PROXY: replying to client CONNECT request');
 | 
			
		||||
          clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n');
 | 
			
		||||
          clientSocket.pipe(serverSocket);
 | 
			
		||||
          serverSocket.write(head);
 | 
			
		||||
          serverSocket.pipe(clientSocket);
 | 
			
		||||
          // workaround, see #2524
 | 
			
		||||
          serverSocket.on('end', function() {
 | 
			
		||||
            clientSocket.end();
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
      proxy.listen(proxyPort, setupClient);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function setupClient() {
 | 
			
		||||
      function doRequest(name, options, host) {
 | 
			
		||||
        tunnel.debug('CLIENT: Making HTTPS request (%s)', name);
 | 
			
		||||
        ++clientRequest;
 | 
			
		||||
        var agent = tunnel.httpsOverHttps(options);
 | 
			
		||||
        var req = https.get({
 | 
			
		||||
          host: 'localhost',
 | 
			
		||||
          port: serverPort,
 | 
			
		||||
          path: '/' + encodeURIComponent(name),
 | 
			
		||||
          headers: {
 | 
			
		||||
            host: host ? host : 'localhost',
 | 
			
		||||
          },
 | 
			
		||||
          rejectUnauthorized: true,
 | 
			
		||||
          agent: agent
 | 
			
		||||
        }, function(res) {
 | 
			
		||||
          tunnel.debug('CLIENT: got HTTPS response (%s)', name);
 | 
			
		||||
          ++clientConnect;
 | 
			
		||||
          res.on('data', function(data) {
 | 
			
		||||
          });
 | 
			
		||||
          res.on('end', function() {
 | 
			
		||||
            req.emit('finish');
 | 
			
		||||
          });
 | 
			
		||||
          res.resume();
 | 
			
		||||
        });
 | 
			
		||||
        req.on('error', function(err) {
 | 
			
		||||
          tunnel.debug('CLIENT: failed HTTP response (%s)', name, err);
 | 
			
		||||
          ++clientError;
 | 
			
		||||
          req.emit('finish');
 | 
			
		||||
        });
 | 
			
		||||
        req.on('finish', function() {
 | 
			
		||||
          if (clientConnect + clientError === clientRequest) {
 | 
			
		||||
            proxy.close();
 | 
			
		||||
            server.close();
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      doRequest('no cert origin nor proxy', { // invalid
 | 
			
		||||
        maxSockets: 1,
 | 
			
		||||
        ca: [serverCA],
 | 
			
		||||
        rejectUnauthorized: true,
 | 
			
		||||
        // no certificate for origin server
 | 
			
		||||
        proxy: {
 | 
			
		||||
          port: proxyPort,
 | 
			
		||||
          ca: [proxyCA],
 | 
			
		||||
          rejectUnauthorized: true,
 | 
			
		||||
          headers: {
 | 
			
		||||
            host: 'proxy2'
 | 
			
		||||
          }
 | 
			
		||||
          // no certificate for proxy
 | 
			
		||||
        }
 | 
			
		||||
      }, 'server2');
 | 
			
		||||
 | 
			
		||||
      doRequest('no cert proxy', { // invalid
 | 
			
		||||
        maxSockets: 1,
 | 
			
		||||
        ca: [serverCA],
 | 
			
		||||
        rejectUnauthorized: true,
 | 
			
		||||
        // client certification for origin server
 | 
			
		||||
        key: client1Key,
 | 
			
		||||
        cert: client1Cert,
 | 
			
		||||
        proxy: {
 | 
			
		||||
          port: proxyPort,
 | 
			
		||||
          ca: [proxyCA],
 | 
			
		||||
          rejectUnauthorized: true,
 | 
			
		||||
          headers: {
 | 
			
		||||
            host: 'proxy2'
 | 
			
		||||
          }
 | 
			
		||||
          // no certificate for proxy
 | 
			
		||||
        }
 | 
			
		||||
      }, 'server2');
 | 
			
		||||
 | 
			
		||||
      doRequest('no cert origin', { // invalid
 | 
			
		||||
        maxSockets: 1,
 | 
			
		||||
        ca: [serverCA],
 | 
			
		||||
        rejectUnauthorized: true,
 | 
			
		||||
        // no certificate for origin server
 | 
			
		||||
        proxy: {
 | 
			
		||||
          port: proxyPort,
 | 
			
		||||
          servername: 'proxy2',
 | 
			
		||||
          ca: [proxyCA],
 | 
			
		||||
          rejectUnauthorized: true,
 | 
			
		||||
          headers: {
 | 
			
		||||
            host: 'proxy2'
 | 
			
		||||
          },
 | 
			
		||||
          // client certification for proxy
 | 
			
		||||
          key: client2Key,
 | 
			
		||||
          cert: client2Cert
 | 
			
		||||
        }
 | 
			
		||||
      }, 'server2');
 | 
			
		||||
 | 
			
		||||
      doRequest('invalid proxy server name', { // invalid
 | 
			
		||||
        maxSockets: 1,
 | 
			
		||||
        ca: [serverCA],
 | 
			
		||||
        rejectUnauthorized: true,
 | 
			
		||||
        // client certification for origin server
 | 
			
		||||
        key: client1Key,
 | 
			
		||||
        cert: client1Cert,
 | 
			
		||||
        proxy: {
 | 
			
		||||
          port: proxyPort,
 | 
			
		||||
          ca: [proxyCA],
 | 
			
		||||
          rejectUnauthorized: true,
 | 
			
		||||
          // client certification for proxy
 | 
			
		||||
          key: client2Key,
 | 
			
		||||
          cert: client2Cert,
 | 
			
		||||
        }
 | 
			
		||||
      }, 'server2');
 | 
			
		||||
 | 
			
		||||
      doRequest('invalid origin server name', { // invalid
 | 
			
		||||
        maxSockets: 1,
 | 
			
		||||
        ca: [serverCA],
 | 
			
		||||
        rejectUnauthorized: true,
 | 
			
		||||
        // client certification for origin server
 | 
			
		||||
        key: client1Key,
 | 
			
		||||
        cert: client1Cert,
 | 
			
		||||
        proxy: {
 | 
			
		||||
          port: proxyPort,
 | 
			
		||||
          servername: 'proxy2',
 | 
			
		||||
          ca: [proxyCA],
 | 
			
		||||
          rejectUnauthorized: true,
 | 
			
		||||
          headers: {
 | 
			
		||||
            host: 'proxy2'
 | 
			
		||||
          },
 | 
			
		||||
          // client certification for proxy
 | 
			
		||||
          key: client2Key,
 | 
			
		||||
          cert: client2Cert
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      doRequest('valid', { // valid
 | 
			
		||||
        maxSockets: 1,
 | 
			
		||||
        ca: [serverCA],
 | 
			
		||||
        rejectUnauthorized: true,
 | 
			
		||||
        // client certification for origin server
 | 
			
		||||
        key: client1Key,
 | 
			
		||||
        cert: client1Cert,
 | 
			
		||||
        proxy: {
 | 
			
		||||
          port: proxyPort,
 | 
			
		||||
          servername: 'proxy2',
 | 
			
		||||
          ca: [proxyCA],
 | 
			
		||||
          rejectUnauthorized: true,
 | 
			
		||||
          headers: {
 | 
			
		||||
            host: 'proxy2'
 | 
			
		||||
          },
 | 
			
		||||
          // client certification for proxy
 | 
			
		||||
          key: client2Key,
 | 
			
		||||
          cert: client2Cert
 | 
			
		||||
        }
 | 
			
		||||
      }, 'server2');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    server.on('close', function() {
 | 
			
		||||
      serverConnect.should.equal(1);
 | 
			
		||||
      proxyConnect.should.equal(3);
 | 
			
		||||
      clientConnect.should.equal(1);
 | 
			
		||||
      clientError.should.equal(5);
 | 
			
		||||
 | 
			
		||||
      done();
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										146
									
								
								node_modules/tunnel/test/https-over-https.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										146
									
								
								node_modules/tunnel/test/https-over-https.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,146 +0,0 @@
 | 
			
		||||
var http = require('http');
 | 
			
		||||
var https = require('https');
 | 
			
		||||
var net = require('net');
 | 
			
		||||
var fs = require('fs');
 | 
			
		||||
var path = require('path');
 | 
			
		||||
var should = require('should');
 | 
			
		||||
var tunnel = require('../index.js');
 | 
			
		||||
 | 
			
		||||
function readPem(file) {
 | 
			
		||||
  return fs.readFileSync(path.join('test/keys', file + '.pem'));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var serverKey = readPem('server1-key');
 | 
			
		||||
var serverCert = readPem('server1-cert');
 | 
			
		||||
var serverCA = readPem('ca1-cert');
 | 
			
		||||
var proxyKey = readPem('proxy1-key');
 | 
			
		||||
var proxyCert = readPem('proxy1-cert');
 | 
			
		||||
var proxyCA = readPem('ca2-cert');
 | 
			
		||||
var client1Key = readPem('client1-key');
 | 
			
		||||
var client1Cert = readPem('client1-cert');
 | 
			
		||||
var client1CA = readPem('ca3-cert');
 | 
			
		||||
var client2Key = readPem('client2-key');
 | 
			
		||||
var client2Cert = readPem('client2-cert');
 | 
			
		||||
var client2CA = readPem('ca4-cert');
 | 
			
		||||
 | 
			
		||||
describe('HTTPS over HTTPS', function() {
 | 
			
		||||
  it('should finish without error', function(done) {
 | 
			
		||||
    var serverPort = 3006;
 | 
			
		||||
    var proxyPort = 3007;
 | 
			
		||||
    var poolSize = 3;
 | 
			
		||||
    var N = 5;
 | 
			
		||||
    var serverConnect = 0;
 | 
			
		||||
    var proxyConnect = 0;
 | 
			
		||||
    var clientConnect = 0;
 | 
			
		||||
    var server;
 | 
			
		||||
    var proxy;
 | 
			
		||||
    var agent;
 | 
			
		||||
 | 
			
		||||
    server = https.createServer({
 | 
			
		||||
      key: serverKey,
 | 
			
		||||
      cert: serverCert,
 | 
			
		||||
      ca: [client1CA],
 | 
			
		||||
      requestCert: true,
 | 
			
		||||
      rejectUnauthorized: true
 | 
			
		||||
    }, function(req, res) {
 | 
			
		||||
      tunnel.debug('SERVER: got request');
 | 
			
		||||
      ++serverConnect;
 | 
			
		||||
      res.writeHead(200);
 | 
			
		||||
      res.end('Hello' + req.url);
 | 
			
		||||
      tunnel.debug('SERVER: sending response');
 | 
			
		||||
    });
 | 
			
		||||
    server.listen(serverPort, setupProxy);
 | 
			
		||||
 | 
			
		||||
    function setupProxy() {
 | 
			
		||||
      proxy = https.createServer({
 | 
			
		||||
        key: proxyKey,
 | 
			
		||||
        cert: proxyCert,
 | 
			
		||||
        ca: [client2CA],
 | 
			
		||||
        requestCert: true,
 | 
			
		||||
        rejectUnauthorized: true
 | 
			
		||||
      }, function(req, res) {
 | 
			
		||||
        should.fail();
 | 
			
		||||
      });
 | 
			
		||||
      proxy.on('upgrade', onConnect); // for v0.6
 | 
			
		||||
      proxy.on('connect', onConnect); // for v0.7 or later
 | 
			
		||||
 | 
			
		||||
      function onConnect(req, clientSocket, head) {
 | 
			
		||||
        tunnel.debug('PROXY: got CONNECT request');
 | 
			
		||||
        req.method.should.equal('CONNECT');
 | 
			
		||||
        req.url.should.equal('localhost:' + serverPort);
 | 
			
		||||
        req.headers.should.not.have.property('transfer-encoding');
 | 
			
		||||
        ++proxyConnect;
 | 
			
		||||
 | 
			
		||||
        var serverSocket = net.connect(serverPort, function() {
 | 
			
		||||
          tunnel.debug('PROXY: replying to client CONNECT request');
 | 
			
		||||
          clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n');
 | 
			
		||||
          clientSocket.pipe(serverSocket);
 | 
			
		||||
          serverSocket.write(head);
 | 
			
		||||
          serverSocket.pipe(clientSocket);
 | 
			
		||||
          // workaround, see joyent/node#2524
 | 
			
		||||
          serverSocket.on('end', function() {
 | 
			
		||||
            clientSocket.end();
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
      proxy.listen(proxyPort, setupClient);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function setupClient() {
 | 
			
		||||
      agent = tunnel.httpsOverHttps({
 | 
			
		||||
        maxSockets: poolSize,
 | 
			
		||||
        // client certification for origin server
 | 
			
		||||
        key: client1Key,
 | 
			
		||||
        cert: client1Cert,
 | 
			
		||||
        ca: [serverCA],
 | 
			
		||||
        rejectUnauthroized: true,
 | 
			
		||||
        proxy: {
 | 
			
		||||
          port: proxyPort,
 | 
			
		||||
          // client certification for proxy
 | 
			
		||||
          key: client2Key,
 | 
			
		||||
          cert: client2Cert,
 | 
			
		||||
          ca: [proxyCA],
 | 
			
		||||
          rejectUnauthroized: true
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      for (var i = 0; i < N; ++i) {
 | 
			
		||||
        doClientRequest(i);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      function doClientRequest(i) {
 | 
			
		||||
        tunnel.debug('CLIENT: Making HTTPS request (%d)', i);
 | 
			
		||||
        var req = https.get({
 | 
			
		||||
          port: serverPort,
 | 
			
		||||
          path: '/' + i,
 | 
			
		||||
          agent: agent
 | 
			
		||||
        }, function(res) {
 | 
			
		||||
          tunnel.debug('CLIENT: got HTTPS response (%d)', i);
 | 
			
		||||
          res.setEncoding('utf8');
 | 
			
		||||
          res.on('data', function(data) {
 | 
			
		||||
            data.should.equal('Hello/' + i);
 | 
			
		||||
          });
 | 
			
		||||
          res.on('end', function() {
 | 
			
		||||
            ++clientConnect;
 | 
			
		||||
            if (clientConnect === N) {
 | 
			
		||||
              proxy.close();
 | 
			
		||||
              server.close();
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    server.on('close', function() {
 | 
			
		||||
      serverConnect.should.equal(N);
 | 
			
		||||
      proxyConnect.should.equal(poolSize);
 | 
			
		||||
      clientConnect.should.equal(N);
 | 
			
		||||
 | 
			
		||||
      var name = 'localhost:' + serverPort;
 | 
			
		||||
      agent.sockets.should.be.empty;
 | 
			
		||||
      agent.requests.should.be.empty;
 | 
			
		||||
  
 | 
			
		||||
      done();
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										157
									
								
								node_modules/tunnel/test/keys/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										157
									
								
								node_modules/tunnel/test/keys/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,157 +0,0 @@
 | 
			
		||||
all: server1-cert.pem server2-cert.pem proxy1-cert.pem proxy2-cert.pem client1-cert.pem client2-cert.pem
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Create Certificate Authority: ca1
 | 
			
		||||
# ('password' is used for the CA password.)
 | 
			
		||||
#
 | 
			
		||||
ca1-cert.pem: ca1.cnf
 | 
			
		||||
	openssl req -new -x509 -days 9999 -config ca1.cnf -keyout ca1-key.pem -out ca1-cert.pem
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Create Certificate Authority: ca2
 | 
			
		||||
# ('password' is used for the CA password.)
 | 
			
		||||
#
 | 
			
		||||
ca2-cert.pem: ca2.cnf
 | 
			
		||||
	openssl req -new -x509 -days 9999 -config ca2.cnf -keyout ca2-key.pem -out ca2-cert.pem
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Create Certificate Authority: ca3
 | 
			
		||||
# ('password' is used for the CA password.)
 | 
			
		||||
#
 | 
			
		||||
ca3-cert.pem: ca3.cnf
 | 
			
		||||
	openssl req -new -x509 -days 9999 -config ca3.cnf -keyout ca3-key.pem -out ca3-cert.pem
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Create Certificate Authority: ca4
 | 
			
		||||
# ('password' is used for the CA password.)
 | 
			
		||||
#
 | 
			
		||||
ca4-cert.pem: ca4.cnf
 | 
			
		||||
	openssl req -new -x509 -days 9999 -config ca4.cnf -keyout ca4-key.pem -out ca4-cert.pem
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# server1 is signed by ca1.
 | 
			
		||||
#
 | 
			
		||||
server1-key.pem:
 | 
			
		||||
	openssl genrsa -out server1-key.pem 1024
 | 
			
		||||
 | 
			
		||||
server1-csr.pem: server1.cnf server1-key.pem
 | 
			
		||||
	openssl req -new -config server1.cnf -key server1-key.pem -out server1-csr.pem
 | 
			
		||||
 | 
			
		||||
server1-cert.pem: server1-csr.pem ca1-cert.pem ca1-key.pem
 | 
			
		||||
	openssl x509 -req \
 | 
			
		||||
		-days 9999 \
 | 
			
		||||
		-passin "pass:password" \
 | 
			
		||||
		-in server1-csr.pem \
 | 
			
		||||
		-CA ca1-cert.pem \
 | 
			
		||||
		-CAkey ca1-key.pem \
 | 
			
		||||
		-CAcreateserial \
 | 
			
		||||
		-out server1-cert.pem
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# server2 is signed by ca1.
 | 
			
		||||
#
 | 
			
		||||
server2-key.pem:
 | 
			
		||||
	openssl genrsa -out server2-key.pem 1024
 | 
			
		||||
 | 
			
		||||
server2-csr.pem: server2.cnf server2-key.pem
 | 
			
		||||
	openssl req -new -config server2.cnf -key server2-key.pem -out server2-csr.pem
 | 
			
		||||
 | 
			
		||||
server2-cert.pem: server2-csr.pem ca1-cert.pem ca1-key.pem
 | 
			
		||||
	openssl x509 -req \
 | 
			
		||||
		-days 9999 \
 | 
			
		||||
		-passin "pass:password" \
 | 
			
		||||
		-in server2-csr.pem \
 | 
			
		||||
		-CA ca1-cert.pem \
 | 
			
		||||
		-CAkey ca1-key.pem \
 | 
			
		||||
		-CAcreateserial \
 | 
			
		||||
		-out server2-cert.pem
 | 
			
		||||
 | 
			
		||||
server2-verify: server2-cert.pem ca1-cert.pem
 | 
			
		||||
	openssl verify -CAfile ca1-cert.pem server2-cert.pem
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# proxy1 is signed by ca2.
 | 
			
		||||
#
 | 
			
		||||
proxy1-key.pem:
 | 
			
		||||
	openssl genrsa -out proxy1-key.pem 1024
 | 
			
		||||
 | 
			
		||||
proxy1-csr.pem: proxy1.cnf proxy1-key.pem
 | 
			
		||||
	openssl req -new -config proxy1.cnf -key proxy1-key.pem -out proxy1-csr.pem
 | 
			
		||||
 | 
			
		||||
proxy1-cert.pem: proxy1-csr.pem ca2-cert.pem ca2-key.pem
 | 
			
		||||
	openssl x509 -req \
 | 
			
		||||
		-days 9999 \
 | 
			
		||||
		-passin "pass:password" \
 | 
			
		||||
		-in proxy1-csr.pem \
 | 
			
		||||
		-CA ca2-cert.pem \
 | 
			
		||||
		-CAkey ca2-key.pem \
 | 
			
		||||
		-CAcreateserial \
 | 
			
		||||
		-out proxy1-cert.pem
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# proxy2 is signed by ca2.
 | 
			
		||||
#
 | 
			
		||||
proxy2-key.pem:
 | 
			
		||||
	openssl genrsa -out proxy2-key.pem 1024
 | 
			
		||||
 | 
			
		||||
proxy2-csr.pem: proxy2.cnf proxy2-key.pem
 | 
			
		||||
	openssl req -new -config proxy2.cnf -key proxy2-key.pem -out proxy2-csr.pem
 | 
			
		||||
 | 
			
		||||
proxy2-cert.pem: proxy2-csr.pem ca2-cert.pem ca2-key.pem
 | 
			
		||||
	openssl x509 -req \
 | 
			
		||||
		-days 9999 \
 | 
			
		||||
		-passin "pass:password" \
 | 
			
		||||
		-in proxy2-csr.pem \
 | 
			
		||||
		-CA ca2-cert.pem \
 | 
			
		||||
		-CAkey ca2-key.pem \
 | 
			
		||||
		-CAcreateserial \
 | 
			
		||||
		-out proxy2-cert.pem
 | 
			
		||||
 | 
			
		||||
proxy2-verify: proxy2-cert.pem ca2-cert.pem
 | 
			
		||||
	openssl verify -CAfile ca2-cert.pem proxy2-cert.pem
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# client1 is signed by ca3.
 | 
			
		||||
#
 | 
			
		||||
client1-key.pem:
 | 
			
		||||
	openssl genrsa -out client1-key.pem 1024
 | 
			
		||||
 | 
			
		||||
client1-csr.pem: client1.cnf client1-key.pem
 | 
			
		||||
	openssl req -new -config client1.cnf -key client1-key.pem -out client1-csr.pem
 | 
			
		||||
 | 
			
		||||
client1-cert.pem: client1-csr.pem ca3-cert.pem ca3-key.pem
 | 
			
		||||
	openssl x509 -req \
 | 
			
		||||
		-days 9999 \
 | 
			
		||||
		-passin "pass:password" \
 | 
			
		||||
		-in client1-csr.pem \
 | 
			
		||||
		-CA ca3-cert.pem \
 | 
			
		||||
		-CAkey ca3-key.pem \
 | 
			
		||||
		-CAcreateserial \
 | 
			
		||||
		-out client1-cert.pem
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# client2 is signed by ca4.
 | 
			
		||||
#
 | 
			
		||||
client2-key.pem:
 | 
			
		||||
	openssl genrsa -out client2-key.pem 1024
 | 
			
		||||
 | 
			
		||||
client2-csr.pem: client2.cnf client2-key.pem
 | 
			
		||||
	openssl req -new -config client2.cnf -key client2-key.pem -out client2-csr.pem
 | 
			
		||||
 | 
			
		||||
client2-cert.pem: client2-csr.pem ca4-cert.pem ca4-key.pem
 | 
			
		||||
	openssl x509 -req \
 | 
			
		||||
		-days 9999 \
 | 
			
		||||
		-passin "pass:password" \
 | 
			
		||||
		-in client2-csr.pem \
 | 
			
		||||
		-CA ca4-cert.pem \
 | 
			
		||||
		-CAkey ca4-key.pem \
 | 
			
		||||
		-CAcreateserial \
 | 
			
		||||
		-out client2-cert.pem
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f *.pem *.srl
 | 
			
		||||
 | 
			
		||||
test: client-verify server2-verify proxy1-verify proxy2-verify client-verify
 | 
			
		||||
							
								
								
									
										14
									
								
								node_modules/tunnel/test/keys/agent1-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								node_modules/tunnel/test/keys/agent1-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,14 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICKjCCAZMCCQDQ8o4kHKdCPDANBgkqhkiG9w0BAQUFADB6MQswCQYDVQQGEwJV
 | 
			
		||||
UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAO
 | 
			
		||||
BgNVBAsTB05vZGUuanMxDDAKBgNVBAMTA2NhMTEgMB4GCSqGSIb3DQEJARYRcnlA
 | 
			
		||||
dGlueWNsb3Vkcy5vcmcwHhcNMTEwMzE0MTgyOTEyWhcNMzgwNzI5MTgyOTEyWjB9
 | 
			
		||||
MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQK
 | 
			
		||||
EwZKb3llbnQxEDAOBgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MTEgMB4G
 | 
			
		||||
CSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmcwXDANBgkqhkiG9w0BAQEFAANL
 | 
			
		||||
ADBIAkEAnzpAqcoXZxWJz/WFK7BXwD23jlREyG11x7gkydteHvn6PrVBbB5yfu6c
 | 
			
		||||
bk8w3/Ar608AcyMQ9vHjkLQKH7cjEQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAKha
 | 
			
		||||
HqjCfTIut+m/idKy3AoFh48tBHo3p9Nl5uBjQJmahKdZAaiksL24Pl+NzPQ8LIU+
 | 
			
		||||
FyDHFp6OeJKN6HzZ72Bh9wpBVu6Uj1hwhZhincyTXT80wtSI/BoUAW8Ls2kwPdus
 | 
			
		||||
64LsJhhxqj2m4vPKNRbHB2QxnNrGi30CUf3kt3Ia
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
							
								
								
									
										10
									
								
								node_modules/tunnel/test/keys/agent1-csr.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								node_modules/tunnel/test/keys/agent1-csr.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,10 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE REQUEST-----
 | 
			
		||||
MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH
 | 
			
		||||
EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD
 | 
			
		||||
EwZhZ2VudDExIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ
 | 
			
		||||
KoZIhvcNAQEBBQADSwAwSAJBAJ86QKnKF2cVic/1hSuwV8A9t45URMhtdce4JMnb
 | 
			
		||||
Xh75+j61QWwecn7unG5PMN/wK+tPAHMjEPbx45C0Ch+3IxECAwEAAaAlMCMGCSqG
 | 
			
		||||
SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB
 | 
			
		||||
AF+AfG64hNyYHum46m6i7RgnUBrJSOynGjs23TekV4he3QdMSAAPPqbll8W14+y3
 | 
			
		||||
vOo7/yQ2v2uTqxCjakUNPPs=
 | 
			
		||||
-----END CERTIFICATE REQUEST-----
 | 
			
		||||
							
								
								
									
										9
									
								
								node_modules/tunnel/test/keys/agent1-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								node_modules/tunnel/test/keys/agent1-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,9 +0,0 @@
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIIBOwIBAAJBAJ86QKnKF2cVic/1hSuwV8A9t45URMhtdce4JMnbXh75+j61QWwe
 | 
			
		||||
cn7unG5PMN/wK+tPAHMjEPbx45C0Ch+3IxECAwEAAQJBAI2cU1IuR+4IO87WPyAB
 | 
			
		||||
76kruoo87AeNQkjjvuQ/00+b/6IS45mcEP5Kw0NukbqBhIw2di9uQ9J51DJ/ZfQr
 | 
			
		||||
+YECIQDUHaN3ZjIdJ7/w8Yq9Zzz+3kY2F/xEz6e4ftOFW8bY2QIhAMAref+WYckC
 | 
			
		||||
oECgOLAvAxB1lI4j7oCbAaawfxKdnPj5AiEAi95rXx09aGpAsBGmSdScrPdG1v6j
 | 
			
		||||
83/2ebrvoZ1uFqkCIB0AssnrRVjUB6GZTNTyU3ERfdkx/RX1zvr8WkFR/lXpAiB7
 | 
			
		||||
cUZ1i8ZkZrPrdVgw2cb28UJM7qZHQnXcMHTXFFvxeQ==
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
							
								
								
									
										19
									
								
								node_modules/tunnel/test/keys/agent1.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								node_modules/tunnel/test/keys/agent1.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,19 +0,0 @@
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits           = 1024
 | 
			
		||||
days                   = 999
 | 
			
		||||
distinguished_name     = req_distinguished_name
 | 
			
		||||
attributes             = req_attributes
 | 
			
		||||
prompt                 = no
 | 
			
		||||
 | 
			
		||||
[ req_distinguished_name ]
 | 
			
		||||
C                      = US
 | 
			
		||||
ST                     = CA
 | 
			
		||||
L                      = SF
 | 
			
		||||
O                      = Joyent
 | 
			
		||||
OU                     = Node.js
 | 
			
		||||
CN                     = agent1
 | 
			
		||||
emailAddress           = ry@tinyclouds.org
 | 
			
		||||
 | 
			
		||||
[ req_attributes ]
 | 
			
		||||
challengePassword              = A challenge password
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										13
									
								
								node_modules/tunnel/test/keys/agent2-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								node_modules/tunnel/test/keys/agent2-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,13 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIB7DCCAZYCCQC7gs0MDNn6MTANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJV
 | 
			
		||||
UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAO
 | 
			
		||||
BgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MjEgMB4GCSqGSIb3DQEJARYR
 | 
			
		||||
cnlAdGlueWNsb3Vkcy5vcmcwHhcNMTEwMzE0MTgyOTEyWhcNMzgwNzI5MTgyOTEy
 | 
			
		||||
WjB9MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYD
 | 
			
		||||
VQQKEwZKb3llbnQxEDAOBgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MjEg
 | 
			
		||||
MB4GCSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmcwXDANBgkqhkiG9w0BAQEF
 | 
			
		||||
AANLADBIAkEAyXb8FrRdKbhrKLgLSsn61i1C7w7fVVVd7OQsmV/7p9WB2lWFiDlC
 | 
			
		||||
WKGU9SiIz/A6wNZDUAuc2E+VwtpCT561AQIDAQABMA0GCSqGSIb3DQEBBQUAA0EA
 | 
			
		||||
C8HzpuNhFLCI3A5KkBS5zHAQax6TFUOhbpBCR0aTDbJ6F1liDTK1lmU/BjvPoj+9
 | 
			
		||||
1LHwrmh29rK8kBPEjmymCQ==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
							
								
								
									
										10
									
								
								node_modules/tunnel/test/keys/agent2-csr.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								node_modules/tunnel/test/keys/agent2-csr.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,10 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE REQUEST-----
 | 
			
		||||
MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH
 | 
			
		||||
EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD
 | 
			
		||||
EwZhZ2VudDIxIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ
 | 
			
		||||
KoZIhvcNAQEBBQADSwAwSAJBAMl2/Ba0XSm4ayi4C0rJ+tYtQu8O31VVXezkLJlf
 | 
			
		||||
+6fVgdpVhYg5QlihlPUoiM/wOsDWQ1ALnNhPlcLaQk+etQECAwEAAaAlMCMGCSqG
 | 
			
		||||
SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB
 | 
			
		||||
AJnll2pt5l0pzskQSpjjLVTlFDFmJr/AZ3UK8v0WxBjYjCe5Jx4YehkChpxIyDUm
 | 
			
		||||
U3J9q9MDUf0+Y2+EGkssFfk=
 | 
			
		||||
-----END CERTIFICATE REQUEST-----
 | 
			
		||||
							
								
								
									
										9
									
								
								node_modules/tunnel/test/keys/agent2-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								node_modules/tunnel/test/keys/agent2-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,9 +0,0 @@
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIIBOgIBAAJBAMl2/Ba0XSm4ayi4C0rJ+tYtQu8O31VVXezkLJlf+6fVgdpVhYg5
 | 
			
		||||
QlihlPUoiM/wOsDWQ1ALnNhPlcLaQk+etQECAwEAAQJBAMT6Bf34+UHKY1ObpsbH
 | 
			
		||||
9u2jsVblFq1rWvs8GPMY6oertzvwm3DpuSUp7PTgOB1nLTLYtCERbQ4ovtN8tn3p
 | 
			
		||||
OHUCIQDzIEGsoCr5vlxXvy2zJwu+fxYuhTZWMVuo1397L0VyhwIhANQh+yzqUgaf
 | 
			
		||||
WRtSB4T2W7ADtJI35ET61jKBty3CqJY3AiAIwju7dVW3A5WeD6Qc1SZGKZvp9yCb
 | 
			
		||||
AFI2BfVwwaY11wIgXF3PeGcvACMyMWsuSv7aPXHfliswAbkWuzcwA4TW01ECIGWa
 | 
			
		||||
cgsDvVFxmfM5NPSuT/UDTa6R5BFISB5ea0N0AR3I
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
							
								
								
									
										19
									
								
								node_modules/tunnel/test/keys/agent2.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								node_modules/tunnel/test/keys/agent2.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,19 +0,0 @@
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits           = 1024
 | 
			
		||||
days                   = 999
 | 
			
		||||
distinguished_name     = req_distinguished_name
 | 
			
		||||
attributes             = req_attributes
 | 
			
		||||
prompt                 = no
 | 
			
		||||
 | 
			
		||||
[ req_distinguished_name ]
 | 
			
		||||
C                      = US
 | 
			
		||||
ST                     = CA
 | 
			
		||||
L                      = SF
 | 
			
		||||
O                      = Joyent
 | 
			
		||||
OU                     = Node.js
 | 
			
		||||
CN                     = agent2
 | 
			
		||||
emailAddress           = ry@tinyclouds.org
 | 
			
		||||
 | 
			
		||||
[ req_attributes ]
 | 
			
		||||
challengePassword              = A challenge password
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										14
									
								
								node_modules/tunnel/test/keys/agent3-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								node_modules/tunnel/test/keys/agent3-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,14 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICKjCCAZMCCQCDBr594bsJmTANBgkqhkiG9w0BAQUFADB6MQswCQYDVQQGEwJV
 | 
			
		||||
UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAO
 | 
			
		||||
BgNVBAsTB05vZGUuanMxDDAKBgNVBAMTA2NhMjEgMB4GCSqGSIb3DQEJARYRcnlA
 | 
			
		||||
dGlueWNsb3Vkcy5vcmcwHhcNMTEwMzE0MTgyOTEyWhcNMzgwNzI5MTgyOTEyWjB9
 | 
			
		||||
MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQK
 | 
			
		||||
EwZKb3llbnQxEDAOBgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MzEgMB4G
 | 
			
		||||
CSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmcwXDANBgkqhkiG9w0BAQEFAANL
 | 
			
		||||
ADBIAkEAtlNDZ+bHeBI0B2gD/IWqA7Aq1hwsnS4+XpnLesjTQcL2JwFFpkR0oWrw
 | 
			
		||||
yjrYhCogi7c5gjKrLZF1d2JD5JgHgQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAJoK
 | 
			
		||||
bXwsImk7vJz9649yrmsXwnuGbEKVYMvqcGyjaZNP9lYEG41y5CeRzxhWy2rlYdhE
 | 
			
		||||
f2nqE2lg75oJP7LQqfQY7aCqwahM3q/GQbsfKVCGjF7TVyq9TQzd8iW+FEJIQzSE
 | 
			
		||||
3aN85hR67+3VAXeSzmkGSVBO2m1SJIug4qftIkc2
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
							
								
								
									
										10
									
								
								node_modules/tunnel/test/keys/agent3-csr.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								node_modules/tunnel/test/keys/agent3-csr.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,10 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE REQUEST-----
 | 
			
		||||
MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH
 | 
			
		||||
EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD
 | 
			
		||||
EwZhZ2VudDMxIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ
 | 
			
		||||
KoZIhvcNAQEBBQADSwAwSAJBALZTQ2fmx3gSNAdoA/yFqgOwKtYcLJ0uPl6Zy3rI
 | 
			
		||||
00HC9icBRaZEdKFq8Mo62IQqIIu3OYIyqy2RdXdiQ+SYB4ECAwEAAaAlMCMGCSqG
 | 
			
		||||
SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB
 | 
			
		||||
AEGo76iH+a8pnE+RWQT+wg9/BL+iIuqrcFXLs0rbGonqderrwXAe15ODwql/Bfu3
 | 
			
		||||
zgMt8ooTsgMPcMX9EgmubEM=
 | 
			
		||||
-----END CERTIFICATE REQUEST-----
 | 
			
		||||
							
								
								
									
										9
									
								
								node_modules/tunnel/test/keys/agent3-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								node_modules/tunnel/test/keys/agent3-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,9 +0,0 @@
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIIBOwIBAAJBALZTQ2fmx3gSNAdoA/yFqgOwKtYcLJ0uPl6Zy3rI00HC9icBRaZE
 | 
			
		||||
dKFq8Mo62IQqIIu3OYIyqy2RdXdiQ+SYB4ECAwEAAQJAIk+G9s2SKgFa8y3a2jGZ
 | 
			
		||||
LfqABSzmJGooaIsOpLuYLd6eCC31XUDlT4rPVGRhysKQCQ4+NMjgdnj9ZqNnvXY/
 | 
			
		||||
RQIhAOgbdltr3Ey2hy7RuDW5rmOeJTuVqCrZ7QI8ifyCEbYTAiEAyRfvWSvvASeP
 | 
			
		||||
kZTMUhATRUpuyDQW+058NE0oJSinTpsCIQCR/FPhBGI3TcaQyA9Ym0T4GwvIAkUX
 | 
			
		||||
TqInefRAAX8qSQIgZVJPAdIWGbHSL9sWW97HpukLCorcbYEtKbkamiZyrjMCIQCX
 | 
			
		||||
lX76ttkeId5OsJGQcF67eFMMr2UGZ1WMf6M39lCYHQ==
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
							
								
								
									
										19
									
								
								node_modules/tunnel/test/keys/agent3.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								node_modules/tunnel/test/keys/agent3.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,19 +0,0 @@
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits           = 1024
 | 
			
		||||
days                   = 999
 | 
			
		||||
distinguished_name     = req_distinguished_name
 | 
			
		||||
attributes             = req_attributes
 | 
			
		||||
prompt                 = no
 | 
			
		||||
 | 
			
		||||
[ req_distinguished_name ]
 | 
			
		||||
C                      = US
 | 
			
		||||
ST                     = CA
 | 
			
		||||
L                      = SF
 | 
			
		||||
O                      = Joyent
 | 
			
		||||
OU                     = Node.js
 | 
			
		||||
CN                     = agent3
 | 
			
		||||
emailAddress           = ry@tinyclouds.org
 | 
			
		||||
 | 
			
		||||
[ req_attributes ]
 | 
			
		||||
challengePassword              = A challenge password
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								node_modules/tunnel/test/keys/agent4-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								node_modules/tunnel/test/keys/agent4-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,15 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICSDCCAbGgAwIBAgIJAIMGvn3huwmaMA0GCSqGSIb3DQEBBQUAMHoxCzAJBgNV
 | 
			
		||||
BAYTAlVTMQswCQYDVQQIEwJDQTELMAkGA1UEBxMCU0YxDzANBgNVBAoTBkpveWVu
 | 
			
		||||
dDEQMA4GA1UECxMHTm9kZS5qczEMMAoGA1UEAxMDY2EyMSAwHgYJKoZIhvcNAQkB
 | 
			
		||||
FhFyeUB0aW55Y2xvdWRzLm9yZzAeFw0xMTAzMTQxODI5MTJaFw0zODA3MjkxODI5
 | 
			
		||||
MTJaMH0xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTELMAkGA1UEBxMCU0YxDzAN
 | 
			
		||||
BgNVBAoTBkpveWVudDEQMA4GA1UECxMHTm9kZS5qczEPMA0GA1UEAxMGYWdlbnQ0
 | 
			
		||||
MSAwHgYJKoZIhvcNAQkBFhFyeUB0aW55Y2xvdWRzLm9yZzBcMA0GCSqGSIb3DQEB
 | 
			
		||||
AQUAA0sAMEgCQQDN/yMfmQ8zdvmjlGk7b3Mn6wY2FjaMb4c5ENJX15vyYhKS1zhx
 | 
			
		||||
6n0kQIn2vf6yqG7tO5Okz2IJiD9Sa06mK6GrAgMBAAGjFzAVMBMGA1UdJQQMMAoG
 | 
			
		||||
CCsGAQUFBwMCMA0GCSqGSIb3DQEBBQUAA4GBAA8FXpRmdrHBdlofNvxa14zLvv0N
 | 
			
		||||
WnUGUmxVklFLKXvpVWTanOhVgI2TDCMrT5WvCRTD25iT1EUKWxjDhFJrklQJ+IfC
 | 
			
		||||
KC6fsgO7AynuxWSfSkc8/acGiAH+20vW9QxR53HYiIDMXEV/wnE0KVcr3t/d70lr
 | 
			
		||||
ImanTrunagV+3O4O
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
							
								
								
									
										10
									
								
								node_modules/tunnel/test/keys/agent4-csr.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								node_modules/tunnel/test/keys/agent4-csr.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,10 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE REQUEST-----
 | 
			
		||||
MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH
 | 
			
		||||
EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD
 | 
			
		||||
EwZhZ2VudDQxIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ
 | 
			
		||||
KoZIhvcNAQEBBQADSwAwSAJBAM3/Ix+ZDzN2+aOUaTtvcyfrBjYWNoxvhzkQ0lfX
 | 
			
		||||
m/JiEpLXOHHqfSRAifa9/rKobu07k6TPYgmIP1JrTqYroasCAwEAAaAlMCMGCSqG
 | 
			
		||||
SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB
 | 
			
		||||
AMzo7GUOBtGm5MSck1rrEE2C1bU3qoVvXVuiN3A/57zXeNeq24FZMLnkDeL9U+/b
 | 
			
		||||
Kj646XFou04gla982Xp74p0=
 | 
			
		||||
-----END CERTIFICATE REQUEST-----
 | 
			
		||||
							
								
								
									
										9
									
								
								node_modules/tunnel/test/keys/agent4-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								node_modules/tunnel/test/keys/agent4-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,9 +0,0 @@
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIIBOQIBAAJBAM3/Ix+ZDzN2+aOUaTtvcyfrBjYWNoxvhzkQ0lfXm/JiEpLXOHHq
 | 
			
		||||
fSRAifa9/rKobu07k6TPYgmIP1JrTqYroasCAwEAAQJAN8RQb+dx1A7rejtdWbfM
 | 
			
		||||
Rww7PD07Oz2eL/a72wgFsdIabRuVypIoHunqV0sAegYtNJt9yu+VhREw0R5tx/qz
 | 
			
		||||
EQIhAPY+nmzp0b4iFRk7mtGUmCTr9iwwzoqzITwphE7FpQnFAiEA1ihUHFT9YPHO
 | 
			
		||||
f85skM6qZv77NEgXHO8NJmQZ5GX1ZK8CICzle+Mluo0tD6W7HV4q9pZ8wzSJbY8S
 | 
			
		||||
W/PpKetm09F1AiAWTw8sAGKAtc/IGo3Oq+iuYAN1F8lolzJsfGMCGujsOwIgAJKP
 | 
			
		||||
t3eXilwX3ZlsDWSklWNZ7iYcfYrvAc3JqU6gFCE=
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
							
								
								
									
										21
									
								
								node_modules/tunnel/test/keys/agent4.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								node_modules/tunnel/test/keys/agent4.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,21 +0,0 @@
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits           = 1024
 | 
			
		||||
days                   = 999
 | 
			
		||||
distinguished_name     = req_distinguished_name
 | 
			
		||||
attributes             = req_attributes
 | 
			
		||||
prompt                 = no
 | 
			
		||||
 | 
			
		||||
[ req_distinguished_name ]
 | 
			
		||||
C                      = US
 | 
			
		||||
ST                     = CA
 | 
			
		||||
L                      = SF
 | 
			
		||||
O                      = Joyent
 | 
			
		||||
OU                     = Node.js
 | 
			
		||||
CN                     = agent4
 | 
			
		||||
emailAddress           = ry@tinyclouds.org
 | 
			
		||||
 | 
			
		||||
[ req_attributes ]
 | 
			
		||||
challengePassword              = A challenge password
 | 
			
		||||
 | 
			
		||||
[ ext_key_usage ]
 | 
			
		||||
extendedKeyUsage       = clientAuth
 | 
			
		||||
							
								
								
									
										14
									
								
								node_modules/tunnel/test/keys/ca1-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								node_modules/tunnel/test/keys/ca1-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,14 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICIzCCAYwCCQC4ONZJx5BOwjANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
 | 
			
		||||
UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTExJTAjBgkqhkiG9w0B
 | 
			
		||||
CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
 | 
			
		||||
NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww
 | 
			
		||||
CgYDVQQDEwNjYTExJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu
 | 
			
		||||
anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJMS1ug8jUu0wwEfD4h9/Mg
 | 
			
		||||
w0fvs7JbpMxtwpdcFpg/6ECd8YzGUvljLzeHPe2AhF26MiWIUN3YTxZRiQQ2tv93
 | 
			
		||||
afRVWchdPypytmuxv2aYGjhZ66Tv4vNRizM71OE+66+KS30gEQW2k4MTr0ZVlRPR
 | 
			
		||||
OVey+zRSLdVaKciB/XaBAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEApfbly4b+Ry1q
 | 
			
		||||
bGIgGrlTvNFvF+j2RuHqSpuTB4nKyw1tbNreKmEEb6SBEfkjcTONx5rKECZ5RRPX
 | 
			
		||||
z4R/o1G6Dn21ouf1pWQO0BC/HnLN30KvvsoZRoxBn/fqBlJA+j/Kpj3RQgFj6l2I
 | 
			
		||||
AKI5fD+ucPqRGhjmmTsNyc+Ln4UfAq8=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/tunnel/test/keys/ca1-cert.srl
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/tunnel/test/keys/ca1-cert.srl
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
B111C9CEF0257692
 | 
			
		||||
							
								
								
									
										17
									
								
								node_modules/tunnel/test/keys/ca1-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								node_modules/tunnel/test/keys/ca1-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,17 +0,0 @@
 | 
			
		||||
-----BEGIN ENCRYPTED PRIVATE KEY-----
 | 
			
		||||
MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIbo5wvG42IY0CAggA
 | 
			
		||||
MBQGCCqGSIb3DQMHBAgf8SPuz4biYASCAoAR4r8MVikusOAEt4Xp6nB7whrMX4iG
 | 
			
		||||
G792Qpf21nHZPMV73w3cdkfimbAfUn8F50tSJwdrAa8U9BjjpL9Kt0loIyXt/r8c
 | 
			
		||||
6PWAQ4WZuLPgTFUTJUNAXrunBHI0iFWYEN4YzJYmT1qN3J4u0diy0MkKz6eJPfZ3
 | 
			
		||||
3v97+nF7dR2H86ZgLKsuE4pO5IRb60XW85d7CYaY6rU6l6mXMF0g9sIccHTlFoet
 | 
			
		||||
Xm6cA7NAm1XSI1ciYcoc8oaVE9dXoOALaTnBEZ2MJGpsYQ0Hr7kB4VKAO9wsOta5
 | 
			
		||||
L9nXPv79Nzo1MZMChkrORFnwOzH4ffsUwVQ70jUzkt5DEyzCM1oSxFNRQESxnFrr
 | 
			
		||||
7c1jLg2gxAVwnqYo8njsKJ23BZqZUxHsBgB2Mg1L/iPT6zhclD0u3RZx9MR4ezB2
 | 
			
		||||
IqoCF19Z5bblkReAeVRAE9Ol4hKVaCEIIPUspcw7eGVGONalHDCSXpIFnJoZLeXJ
 | 
			
		||||
OZjLmYlA6KkJw52eNE5IwIb8l/tha2fwNpRvlMoXp65yH9wKyJk8zPSM6WAk4dKD
 | 
			
		||||
nLrTCK4KtM6aIbG14Mff6WEf3uaLPM0cLwxmuypfieCZfkIzgytNdFZoBgaYUpon
 | 
			
		||||
zazvUMoy3gqDBorcU08SaosdRoL+s+QVkRhA29shf42lqOM4zbh0dTul4QDlLG0U
 | 
			
		||||
VBNeMJ3HnrqATfBU28j3bUqtuF2RffgcN/3ivlBjcyzF/iPt0TWmm6Zz5v4K8+b6
 | 
			
		||||
lOm6gofIz+ffg2cXfPzrqZ2/xhFkcerRuN0Xp5eAhlI2vGJVGuEc4X+tT7VtQgLV
 | 
			
		||||
iovqzlLhp+ph/gsfCcsYZ9iso3ozw+Cx1HfJ8XT7yWUgXxblkt4uszEo
 | 
			
		||||
-----END ENCRYPTED PRIVATE KEY-----
 | 
			
		||||
							
								
								
									
										17
									
								
								node_modules/tunnel/test/keys/ca1.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								node_modules/tunnel/test/keys/ca1.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,17 +0,0 @@
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits           = 1024
 | 
			
		||||
days                   = 9999
 | 
			
		||||
distinguished_name     = req_distinguished_name
 | 
			
		||||
attributes             = req_attributes
 | 
			
		||||
prompt                 = no
 | 
			
		||||
output_password        = password
 | 
			
		||||
 | 
			
		||||
[ req_distinguished_name ]
 | 
			
		||||
C                      = JP
 | 
			
		||||
OU                     = nodejs_jp
 | 
			
		||||
CN                     = ca1
 | 
			
		||||
emailAddress           = koichik@improvement.jp
 | 
			
		||||
 | 
			
		||||
[ req_attributes ]
 | 
			
		||||
challengePassword              = A challenge password
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										14
									
								
								node_modules/tunnel/test/keys/ca2-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								node_modules/tunnel/test/keys/ca2-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,14 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICIzCCAYwCCQCxIhZSDET+8DANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
 | 
			
		||||
UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0B
 | 
			
		||||
CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
 | 
			
		||||
NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww
 | 
			
		||||
CgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu
 | 
			
		||||
anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaaLMMe7K5eYABH3NnJoimG
 | 
			
		||||
LvY4S5tdGF6YRwfkn1bgGa+kEw1zNqa/Y0jSzs4h7bApt3+bKTalR4+Zk+0UmWgZ
 | 
			
		||||
Gvlq8+mdqDXtBKoWE3vYDPBmeNyKsgxf9UIhFOpsxVUeYP8t66qJyUk/FlFJcDqc
 | 
			
		||||
WPawikl1bUFSZXBKu4PxAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAwh3sXPIkA5kn
 | 
			
		||||
fpg7fV5haS4EpFr9ia61dzWbhXDZtasAx+nWdWqgG4T+HIYSLlMNZbGJ998uhFZf
 | 
			
		||||
DEHlbY/WuSBukZ0w+xqKBtPyjLIQKVvNiaTx5YMzQes62R1iklOXzBzyHbYIxFOG
 | 
			
		||||
dqLfIjEe/mVVoR23LN2tr8Wa6+rmd+w=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/tunnel/test/keys/ca2-cert.srl
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/tunnel/test/keys/ca2-cert.srl
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
9BF2D4B2E00EDF16
 | 
			
		||||
							
								
								
									
										10
									
								
								node_modules/tunnel/test/keys/ca2-crl.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								node_modules/tunnel/test/keys/ca2-crl.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,10 +0,0 @@
 | 
			
		||||
-----BEGIN X509 CRL-----
 | 
			
		||||
MIIBXTCBxzANBgkqhkiG9w0BAQQFADB6MQswCQYDVQQGEwJVUzELMAkGA1UECBMC
 | 
			
		||||
Q0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAOBgNVBAsTB05vZGUu
 | 
			
		||||
anMxDDAKBgNVBAMTA2NhMjEgMB4GCSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5v
 | 
			
		||||
cmcXDTExMDMxNDE4MjkxNloXDTEzMTIwNzE4MjkxNlowHDAaAgkAgwa+feG7CZoX
 | 
			
		||||
DTExMDMxNDE4MjkxNFowDQYJKoZIhvcNAQEEBQADgYEArRKuEkOla61fm4zlZtHe
 | 
			
		||||
LTXFV0Hgo21PScHAp6JqPol4rN5R9+EmUkv7gPCVVBJ9VjIgxSosHiLsDiz3zR+u
 | 
			
		||||
txHemhzbdIVANAIiChnFct8sEqH2eL4N6XNUIlMIR06NjNl7NbN8w8haqiearnuT
 | 
			
		||||
wmnaL4TThPmpbpKAF7N7JqQ=
 | 
			
		||||
-----END X509 CRL-----
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/tunnel/test/keys/ca2-database.txt
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/tunnel/test/keys/ca2-database.txt
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
R	380729182912Z	110314182914Z	8306BE7DE1BB099A	unknown	/C=US/ST=CA/L=SF/O=Joyent/OU=Node.js/CN=agent4/emailAddress=ry@tinyclouds.org
 | 
			
		||||
							
								
								
									
										17
									
								
								node_modules/tunnel/test/keys/ca2-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								node_modules/tunnel/test/keys/ca2-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,17 +0,0 @@
 | 
			
		||||
-----BEGIN ENCRYPTED PRIVATE KEY-----
 | 
			
		||||
MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQI3aq9fKZIOF0CAggA
 | 
			
		||||
MBQGCCqGSIb3DQMHBAjyunMfVve0OwSCAoAdMsrRFlQUSILw+bq3cSVIIbFjwcs0
 | 
			
		||||
B1Uz2rc9SB+1qjsazjv4zvPQSXTrsx2EOSJf9PSPz7r+c0NzO9vfWLorpXof/lwL
 | 
			
		||||
C1tRN7/1OqEW/mTK+1wlv0M5C4cmf44BBXmI+y+RWrQ/qc+CWEMvfHwv9zWr2K+i
 | 
			
		||||
cLlZv55727GvZYCMMVLiqYd/Ejj98loBsE5dhN4JJ5MPaN3UHhFTCpD453GIIzCi
 | 
			
		||||
FRuYhOOtX4qYoEuP2db4S2qu26723ZJnYBEHkK2YZiRrgvoZHugyGIr4f/RRoSUI
 | 
			
		||||
fPgycgQfL3Ow+Y1G533PiZ+CYgh9cViUzhZImEPiZpSuUntAD1loOYkJuV9Ai9XZ
 | 
			
		||||
+t6+7tfkM3aAo1bkaU8KcfINxxNWfAhCbUQw+tGJl2A+73OM5AGjGSfzjQQL/FOa
 | 
			
		||||
5omfEvdfEX2XyRRlqnQ2VucvSTL9ZdzbIJGg/euJTpM44Fwc7yAZv2aprbPoPixu
 | 
			
		||||
yyf0LoTjlGGSBZvHkunpWx82lYEXvHhcnCxV5MDFw8wehvDrvcSuzb8//HzLOiOB
 | 
			
		||||
gzUr3DOQk4U1UD6xixZjAKC+NUwTVZoHg68KtmQfkq+eGUWf5oJP4xUigi3ui/Wy
 | 
			
		||||
OCBDdlRBkFtgLGL51KJqtq1ixx3Q9HMl0y6edr5Ls0unDIo0LtUWUUcAtr6wl+kK
 | 
			
		||||
zSztxFMi2zTtbhbkwoVpucNstFQNfV1k22vtnlcux2FV2DdZiJQwYpIbr8Gj6gpK
 | 
			
		||||
gtV5l9RFe21oZBcKPt/chrF8ayiClfGMpF3D2p2GqGCe0HuH5uM/JAFf60rbnriA
 | 
			
		||||
Nu1bWiXsXLRUXcLIQ/uEPR3Mvvo9k1h4Q6it1Rp67eQiXCX6h2uFq+sB
 | 
			
		||||
-----END ENCRYPTED PRIVATE KEY-----
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/tunnel/test/keys/ca2-serial
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/tunnel/test/keys/ca2-serial
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
01
 | 
			
		||||
							
								
								
									
										17
									
								
								node_modules/tunnel/test/keys/ca2.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								node_modules/tunnel/test/keys/ca2.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,17 +0,0 @@
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits           = 1024
 | 
			
		||||
days                   = 9999
 | 
			
		||||
distinguished_name     = req_distinguished_name
 | 
			
		||||
attributes             = req_attributes
 | 
			
		||||
prompt                 = no
 | 
			
		||||
output_password        = password
 | 
			
		||||
 | 
			
		||||
[ req_distinguished_name ]
 | 
			
		||||
C                      = JP
 | 
			
		||||
OU                     = nodejs_jp
 | 
			
		||||
CN                     = ca2
 | 
			
		||||
emailAddress           = koichik@improvement.jp
 | 
			
		||||
 | 
			
		||||
[ req_attributes ]
 | 
			
		||||
challengePassword              = A challenge password
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										14
									
								
								node_modules/tunnel/test/keys/ca3-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								node_modules/tunnel/test/keys/ca3-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,14 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICIzCCAYwCCQCudHFhEWiUHDANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
 | 
			
		||||
UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTMxJTAjBgkqhkiG9w0B
 | 
			
		||||
CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
 | 
			
		||||
NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww
 | 
			
		||||
CgYDVQQDEwNjYTMxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu
 | 
			
		||||
anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJPRJMhCNtxX6dQ3rLdrzVCl
 | 
			
		||||
XJMSRIICpbsc7arOzSJcrsIYeYC4d29dGwxYNLnAkKSmHujFT9SmFgh88CoYETLp
 | 
			
		||||
gE9zCk9hVCwUlWelM/UaIrzeLT4SC3VBptnLmMtk2mqFniLcaFdMycAcX8OIhAgG
 | 
			
		||||
fbqyT5Wxwz7UMegip2ZjAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEADpu8a/W+NPnS
 | 
			
		||||
mhyIOxXn8O//2oH9ELlBYFLIgTid0xmS05x/MgkXtWqiBEEZFoOfoJBJxM3vTFs0
 | 
			
		||||
PiZvcVjv0IIjDF4s54yRVH+4WI2p7cil1fgzAVRTuOIuR+VyN7ct8s26a/7GFDq6
 | 
			
		||||
NJMByyjsJHyxwwri5hVv+jbLCxmnDjI=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/tunnel/test/keys/ca3-cert.srl
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/tunnel/test/keys/ca3-cert.srl
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
EF7B2CF0FA61DF41
 | 
			
		||||
							
								
								
									
										17
									
								
								node_modules/tunnel/test/keys/ca3-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								node_modules/tunnel/test/keys/ca3-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,17 +0,0 @@
 | 
			
		||||
-----BEGIN ENCRYPTED PRIVATE KEY-----
 | 
			
		||||
MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIwAta+L4c9soCAggA
 | 
			
		||||
MBQGCCqGSIb3DQMHBAgqRud2p3SvogSCAoDXoDJOJDkvgFpQ6rxeV5r0fLX4SrGJ
 | 
			
		||||
quv4yt02QxSDUPN2ZLtBt6bLzg4Zv2pIggufYJcZ2IOUnX82T7FlvBP8hbW1q3Bs
 | 
			
		||||
jAso7z8kJlFrZjNudjuP2l/X8tjrVyr3I0PoRoomtcHnCcSDdyne8Dqqj1enuikF
 | 
			
		||||
8b7FZUqocNLfu8LmNGxMmMwjw3UqhtpP5DjqV60B8ytQFPoz/gFh6aNGvsrD/avU
 | 
			
		||||
Dj8EJkQZP6Q32vmCzAvSiLjk7FA7RFmBtaurE9hJYNlc5v1eo69EUwPkeVlTpglJ
 | 
			
		||||
5sZAHxlhQCgc72ST6uFQKiMO3ng/JJA5N9EvacYSHQvI1TQIo43V2A//zUh/5hGL
 | 
			
		||||
sDv4pRuFq9miX8iiQpwo1LDfRzdwg7+tiLm8/mDyeLUSzDNc6GIX/tC9R4Ukq4ge
 | 
			
		||||
1Cfq0gtKSRxZhM8HqpGBC9rDs5mpdUqTRsoHLFn5T6/gMiAtrLCJxgD8JsZBa8rM
 | 
			
		||||
KZ09QEdZXTvpyvZ8bSakP5PF6Yz3QYO32CakL7LDPpCng0QDNHG10YaZbTOgJIzQ
 | 
			
		||||
NJ5o87DkgDx0Bb3L8FoREIBkjpYFbQi2fvPthoepZ3D5VamVsOwOiZ2sR1WF2J8l
 | 
			
		||||
X9c8GdG38byO+SQIPNZ8eT5JvUcNeSlIZiVSwvaEk496d2KzhmMMfoBLFVeHXG90
 | 
			
		||||
CIZPleVfkTmgNQgXPWcFngqTZdDEGsHjEDDhbEAijB3EeOxyiiEDJPMy5zqkdy5D
 | 
			
		||||
cZ/Y77EDbln7omcyL+cGvCgBhhYpTbtbuBtzW4CiCvcfEB5N4EtJKOTRJXIpL/d3
 | 
			
		||||
oVnZruqRRKidKwFMEZU2NZJX5FneAWFSeCv0IrY2vAUIc3El+n84CFFK
 | 
			
		||||
-----END ENCRYPTED PRIVATE KEY-----
 | 
			
		||||
							
								
								
									
										17
									
								
								node_modules/tunnel/test/keys/ca3.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								node_modules/tunnel/test/keys/ca3.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,17 +0,0 @@
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits           = 1024
 | 
			
		||||
days                   = 9999
 | 
			
		||||
distinguished_name     = req_distinguished_name
 | 
			
		||||
attributes             = req_attributes
 | 
			
		||||
prompt                 = no
 | 
			
		||||
output_password        = password
 | 
			
		||||
 | 
			
		||||
[ req_distinguished_name ]
 | 
			
		||||
C                      = JP
 | 
			
		||||
OU                     = nodejs_jp
 | 
			
		||||
CN                     = ca3
 | 
			
		||||
emailAddress           = koichik@improvement.jp
 | 
			
		||||
 | 
			
		||||
[ req_attributes ]
 | 
			
		||||
challengePassword              = A challenge password
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										14
									
								
								node_modules/tunnel/test/keys/ca4-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								node_modules/tunnel/test/keys/ca4-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,14 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICIzCCAYwCCQDUGh2r7lOpITANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
 | 
			
		||||
UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTQxJTAjBgkqhkiG9w0B
 | 
			
		||||
CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
 | 
			
		||||
NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww
 | 
			
		||||
CgYDVQQDEwNjYTQxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu
 | 
			
		||||
anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOOC+SPC8XzkjIHfKPMzzNV6
 | 
			
		||||
O/LpqQWdzJtEvFNW0oQ9g8gSV4iKqwUFrLNnSlwSGigvqKqGmYtG8S17ANWInoxI
 | 
			
		||||
c3sQlrS2cGbgLUBNKu4hZ7s+11EPOjbnn0QUE5w9GN8fy8CDx7ID/8URYKoxcoRv
 | 
			
		||||
0w7EJ2agfd68KS1ayxUXAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAumPFeR63Dyki
 | 
			
		||||
SWQtRAe2QWkIFlSRAR2PvSDdsDMLwMeXF5wD3Hv51yfTu9Gkg0QJB86deYfQ5vfV
 | 
			
		||||
4QsOQ35icesa12boyYpTE0/OoEX1f/s1sLlszpRvtAki3J4bkcGWAzM5yO1fKqpQ
 | 
			
		||||
MbtPzLn+DA7ymxuJa6EQAEb+kaJEBuU=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/tunnel/test/keys/ca4-cert.srl
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/tunnel/test/keys/ca4-cert.srl
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
B01FE0416A2EDCF5
 | 
			
		||||
							
								
								
									
										17
									
								
								node_modules/tunnel/test/keys/ca4-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								node_modules/tunnel/test/keys/ca4-key.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,17 +0,0 @@
 | 
			
		||||
-----BEGIN ENCRYPTED PRIVATE KEY-----
 | 
			
		||||
MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIWE/ri/feeikCAggA
 | 
			
		||||
MBQGCCqGSIb3DQMHBAiu6hUzoFnsVASCAoC53ZQ4gxLcFnb5yAcdCl4DdKOJ5m4G
 | 
			
		||||
CHosR87pJpZlO68DsCKwORUp9tTmb1/Q4Wm9n2kRf6VQNyVVm6REwzEPAgIJEgy2
 | 
			
		||||
FqLmfqpTElbRsQako8UDXjDjaMO30e+Qhy8HOTrHMJZ6LgrU90xnOCPPeN9fYmIu
 | 
			
		||||
YBkX4qewUfu+wFzk/unUbFLChvJsEN4fdrlDwTJMHRzKwbdvg3mHlCnspWwjA2Mc
 | 
			
		||||
q27QPeb3mwRUajmqL0dT9y7wVYeAN2zV59VoWm6zV+dWFgyMlVrVCRYkqQC3xOsy
 | 
			
		||||
ZlKrGldrY8nNdv5s6+Sc7YavTJiJxHgIB7sm6QFIsdqjxTBEGD4/YhEI52SUw/xO
 | 
			
		||||
VJmOTWdWUz4FdWNi7286nfhZ0+mdv6fUoG54Qv6ahnUMJvEsp60LkR1gHXLzQu/m
 | 
			
		||||
+yDZFqY/IIg2QA7M3gL0Md5GrWydDlD2uBPoXcC4A5gfOHswzHWDKurDCpoMqdpn
 | 
			
		||||
CUQ/ZVl2rwF8Pnty61MjY1xCN1r8xQjFBCgcfBWw5v6sNRbr/vef3TfQIBzVm+hx
 | 
			
		||||
akDb1nckBsIjMT9EfeT6hXub2n0oehEHewF1COifbcOjnxToLSswPLrtb0behB+o
 | 
			
		||||
zTgftn+4XrkY0sFY69TzYtQVMLAsiWTpZFvAi+D++2pXlQ/bnxKJiBBc6kZuAGpN
 | 
			
		||||
z+cJ4kUuFE4S9v5C5vK89nIgcuJT06u8wYTy0N0j/DnIjSaVgGr0Y0841mXtU1VV
 | 
			
		||||
wUZjuyYrVwVT/g5r6uzEFldTcjmYkbMaxo+MYnEZZgqYJvu2QlK87YxJOwo+D1NX
 | 
			
		||||
4gl1s/bmlPlGw/t9TxutI3S9PEr3JM3013e9UPE+evlTG9IIrZaUPzyj
 | 
			
		||||
-----END ENCRYPTED PRIVATE KEY-----
 | 
			
		||||
							
								
								
									
										17
									
								
								node_modules/tunnel/test/keys/ca4.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								node_modules/tunnel/test/keys/ca4.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,17 +0,0 @@
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits           = 1024
 | 
			
		||||
days                   = 9999
 | 
			
		||||
distinguished_name     = req_distinguished_name
 | 
			
		||||
attributes             = req_attributes
 | 
			
		||||
prompt                 = no
 | 
			
		||||
output_password        = password
 | 
			
		||||
 | 
			
		||||
[ req_distinguished_name ]
 | 
			
		||||
C                      = JP
 | 
			
		||||
OU                     = nodejs_jp
 | 
			
		||||
CN                     = ca4
 | 
			
		||||
emailAddress           = koichik@improvement.jp
 | 
			
		||||
 | 
			
		||||
[ req_attributes ]
 | 
			
		||||
challengePassword              = A challenge password
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										16
									
								
								node_modules/tunnel/test/keys/client.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								node_modules/tunnel/test/keys/client.cnf
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,16 +0,0 @@
 | 
			
		||||
[ req ]
 | 
			
		||||
default_bits           = 1024
 | 
			
		||||
days                   = 9999
 | 
			
		||||
distinguished_name     = req_distinguished_name
 | 
			
		||||
attributes             = req_attributes
 | 
			
		||||
prompt                 = no
 | 
			
		||||
 | 
			
		||||
[ req_distinguished_name ]
 | 
			
		||||
C                      = JP
 | 
			
		||||
OU                     = nodejs_jp
 | 
			
		||||
CN                     = localhost
 | 
			
		||||
emailAddress           = koichik@improvement.jp
 | 
			
		||||
 | 
			
		||||
[ req_attributes ]
 | 
			
		||||
challengePassword              = A challenge password
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										14
									
								
								node_modules/tunnel/test/keys/client1-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								node_modules/tunnel/test/keys/client1-cert.pem
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,14 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIICKTCCAZICCQDveyzw+mHfQTANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK
 | 
			
		||||
UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTMxJTAjBgkqhkiG9w0B
 | 
			
		||||
CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw
 | 
			
		||||
NTEwMTEyMzIxWjBcMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRIw
 | 
			
		||||
EAYDVQQDEwlsb2NhbGhvc3QxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92
 | 
			
		||||
ZW1lbnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMYUuKyuxT93zvrS
 | 
			
		||||
mL8IMI8xu8dP3iRZDUYu6dmq6Dntgb7intfzxtEFVmfNCDGwJwg7UKx/FzftGxFb
 | 
			
		||||
9LksuvAQuW2FLhCrOmXUVU938OZkQRSflISD80kd4i9JEoKKYPX1imjaMugIQ0ta
 | 
			
		||||
Bq2orY6sna8JAUVDW6WO3wVEJ4mBAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAAbaH
 | 
			
		||||
bc/6dIFC9TPIDrgsLtsOtycdBJqKbFT1wThhyKncXF/iyaI+8N4UA+hXMjk8ODUl
 | 
			
		||||
BVmmgaN6ufMLwnx/Gdl9FLmmDq4FQ4zspClTJo42QPzg5zKoPSw5liy73LM7z+nG
 | 
			
		||||
g6IeM8RFlEbs109YxqvQnbHfTgeLdIsdvtNXU80=
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user