2019-12-03 10:28:59 -05:00
module . exports =
/******/ ( function ( modules , runtime ) { // webpackBootstrap
/******/ "use strict" ;
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__ ( moduleId ) {
/******/
/******/ // Check if module is in cache
/******/ if ( installedModules [ moduleId ]) {
/******/ return installedModules [ moduleId ]. exports ;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules [ moduleId ] = {
/******/ i : moduleId ,
/******/ l : false ,
/******/ exports : {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules [ moduleId ]. call ( module . exports , module , module . exports , __webpack_require__ );
/******/
/******/ // Flag the module as loaded
/******/ module . l = true ;
/******/
/******/ // Return the exports of the module
/******/ return module . exports ;
/******/ }
/******/
/******/
/******/ __webpack_require__ . ab = __dirname + "/" ;
/******/
/******/ // the startup function
/******/ function startup () {
/******/ // Load entry module and return exports
/******/ return __webpack_require__ ( 198 );
/******/ };
/******/
/******/ // run startup
/******/ return startup ();
/******/ })
/************************************************************************/
/******/ ({
/***/ 0 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
2019-12-09 16:54:42 -05:00
const Octokit = __webpack_require__ ( 529 );
2019-12-03 10:28:59 -05:00
2019-12-09 16:54:42 -05:00
const CORE_PLUGINS = [
__webpack_require__ ( 372 ),
__webpack_require__ ( 19 ), // deprecated: remove in v17
__webpack_require__ ( 190 ),
__webpack_require__ ( 148 ),
__webpack_require__ ( 248 ),
__webpack_require__ ( 586 ),
__webpack_require__ ( 430 ),
2019-12-03 10:28:59 -05:00
2019-12-09 16:54:42 -05:00
__webpack_require__ ( 850 ) // deprecated: remove in v17
];
2019-12-03 10:28:59 -05:00
2019-12-09 16:54:42 -05:00
module . exports = Octokit . plugin ( CORE_PLUGINS );
2019-12-03 10:28:59 -05:00
/***/ }),
/***/ 1 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
var __awaiter = ( this && this . __awaiter ) || function ( thisArg , _arguments , P , generator ) {
function adopt ( value ) { return value instanceof P ? value : new P ( function ( resolve ) { resolve ( value ); }); }
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 ) : adopt ( result . value ). then ( fulfilled , rejected ); }
step (( generator = generator . apply ( thisArg , _arguments || [])). next ());
});
};
Object . defineProperty ( exports , "__esModule" , { value : true });
const childProcess = __webpack_require__ ( 129 );
const path = __webpack_require__ ( 622 );
const util_1 = __webpack_require__ ( 669 );
const ioUtil = __webpack_require__ ( 672 );
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 toolkit 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 toolkit 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
/***/ }),
/***/ 2 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
const os = __webpack_require__ ( 87 );
const macosRelease = __webpack_require__ ( 118 );
const winRelease = __webpack_require__ ( 49 );
const osName = ( platform , release ) => {
if ( ! platform && release ) {
throw new Error ( 'You can\'t specify a `release` without specifying `platform`' );
}
platform = platform || os . platform ();
let id ;
if ( platform === 'darwin' ) {
if ( ! release && os . platform () === 'darwin' ) {
release = os . release ();
}
const prefix = release ? ( Number ( release . split ( '.' )[ 0 ]) > 15 ? 'macOS' : 'OS X' ) : 'macOS' ;
id = release ? macosRelease ( release ). name : '' ;
return prefix + ( id ? ' ' + id : '' );
}
if ( platform === 'linux' ) {
if ( ! release && os . platform () === 'linux' ) {
release = os . release ();
}
id = release ? release . replace ( /^(\d+\.\d+).*/ , '$1' ) : '' ;
return 'Linux' + ( id ? ' ' + id : '' );
}
if ( platform === 'win32' ) {
if ( ! release && os . platform () === 'win32' ) {
release = os . release ();
}
id = release ? winRelease ( release ) : '' ;
return 'Windows' + ( id ? ' ' + id : '' );
}
return platform ;
};
module . exports = osName ;
/***/ }),
/***/ 8 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = iterator ;
const normalizePaginatedListResponse = __webpack_require__ ( 301 );
function iterator ( octokit , options ) {
const headers = options . headers ;
let url = octokit . request . endpoint ( options ). url ;
return {
[ Symbol . asyncIterator ] : () => ({
next () {
if ( ! url ) {
return Promise . resolve ({ done : true });
}
return octokit
. request ({ url , headers })
. then ( response => {
normalizePaginatedListResponse ( octokit , url , response );
// `response.headers.link` format:
// '<https://api.github.com/users/aseemk/followers?page=2>; rel="next", <https://api.github.com/users/aseemk/followers?page=2>; rel="last"'
// sets `url` to undefined if "next" URL is not present or `link` header is not set
url = (( response . headers . link || "" ). match (
/<([^>]+)>;\s*rel="next"/
) || [])[ 1 ];
return { value : response };
});
}
})
};
}
/***/ }),
/***/ 9 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
var __awaiter = ( this && this . __awaiter ) || function ( thisArg , _arguments , P , generator ) {
function adopt ( value ) { return value instanceof P ? value : new P ( function ( resolve ) { resolve ( value ); }); }
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 ) : adopt ( result . value ). then ( fulfilled , rejected ); }
step (( generator = generator . apply ( thisArg , _arguments || [])). next ());
});
};
Object . defineProperty ( exports , "__esModule" , { value : true });
const os = __webpack_require__ ( 87 );
const events = __webpack_require__ ( 614 );
const child = __webpack_require__ ( 129 );
/* 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 precede 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
/***/ }),
/***/ 11 :
/***/ ( function ( module ) {
// Returns a wrapper function that returns a wrapped callback
// The wrapper function should do some stuff, and return a
// presumably different callback function.
// This makes sure that own properties are retained, so that
// decorations and such are not lost along the way.
module . exports = wrappy
function wrappy ( fn , cb ) {
if ( fn && cb ) return wrappy ( fn )( cb )
if ( typeof fn !== 'function' )
throw new TypeError ( 'need wrapper function' )
Object . keys ( fn ). forEach ( function ( k ) {
wrapper [ k ] = fn [ k ]
})
return wrapper
function wrapper () {
var args = new Array ( arguments . length )
for ( var i = 0 ; i < args . length ; i ++ ) {
args [ i ] = arguments [ i ]
}
var ret = fn . apply ( this , args )
var cb = args [ args . length - 1 ]
if ( typeof ret === 'function' && ret !== cb ) {
Object . keys ( cb ). forEach ( function ( k ) {
ret [ k ] = cb [ k ]
})
}
return ret
}
}
/***/ }),
/***/ 18 :
/***/ ( function () {
eval ( "require" )( "encoding" );
/***/ }),
/***/ 19 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = authenticationPlugin ;
const { Deprecation } = __webpack_require__ ( 692 );
const once = __webpack_require__ ( 969 );
const deprecateAuthenticate = once (( log , deprecation ) => log . warn ( deprecation ));
const authenticate = __webpack_require__ ( 674 );
const beforeRequest = __webpack_require__ ( 471 );
const requestError = __webpack_require__ ( 349 );
function authenticationPlugin ( octokit , options ) {
if ( options . auth ) {
octokit . authenticate = () => {
deprecateAuthenticate (
octokit . log ,
new Deprecation (
'[@octokit/rest] octokit.authenticate() is deprecated and has no effect when "auth" option is set on Octokit constructor'
)
);
};
return ;
}
const state = {
octokit ,
auth : false
};
octokit . authenticate = authenticate . bind ( null , state );
octokit . hook . before ( "request" , beforeRequest . bind ( null , state ));
octokit . hook . error ( "request" , requestError . bind ( null , state ));
}
/***/ }),
/***/ 20 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
const cp = __webpack_require__ ( 129 );
const parse = __webpack_require__ ( 568 );
const enoent = __webpack_require__ ( 881 );
function spawn ( command , args , options ) {
// Parse the arguments
const parsed = parse ( command , args , options );
// Spawn the child process
const spawned = cp . spawn ( parsed . command , parsed . args , parsed . options );
// Hook into child process "exit" event to emit an error if the command
// does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
enoent . hookChildProcess ( spawned , parsed );
return spawned ;
}
function spawnSync ( command , args , options ) {
// Parse the arguments
const parsed = parse ( command , args , options );
// Spawn the child process
const result = cp . spawnSync ( parsed . command , parsed . args , parsed . options );
// Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
result . error = result . error || enoent . verifyENOENTSync ( result . status , parsed );
return result ;
}
module . exports = spawn ;
module . exports . spawn = spawn ;
module . exports . sync = spawnSync ;
module . exports . _parse = parse ;
module . exports . _enoent = enoent ;
/***/ }),
/***/ 39 :
/***/ ( function ( module ) {
"use strict" ;
module . exports = opts => {
opts = opts || {};
const env = opts . env || process . env ;
const platform = opts . platform || process . platform ;
if ( platform !== 'win32' ) {
return 'PATH' ;
}
return Object . keys ( env ). find ( x => x . toUpperCase () === 'PATH' ) || 'Path' ;
};
/***/ }),
/***/ 47 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = factory ;
const Octokit = __webpack_require__ ( 402 );
const registerPlugin = __webpack_require__ ( 855 );
function factory ( plugins ) {
const Api = Octokit . bind ( null , plugins || []);
Api . plugin = registerPlugin . bind ( null , plugins || []);
return Api ;
}
/***/ }),
/***/ 49 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
const os = __webpack_require__ ( 87 );
const execa = __webpack_require__ ( 955 );
// Reference: https://www.gaijin.at/en/lstwinver.php
const names = new Map ([
[ '10.0' , '10' ],
[ '6.3' , '8.1' ],
[ '6.2' , '8' ],
[ '6.1' , '7' ],
[ '6.0' , 'Vista' ],
[ '5.2' , 'Server 2003' ],
[ '5.1' , 'XP' ],
[ '5.0' , '2000' ],
[ '4.9' , 'ME' ],
[ '4.1' , '98' ],
[ '4.0' , '95' ]
]);
const windowsRelease = release => {
const version = /\d+\.\d/ . exec ( release || os . release ());
if ( release && ! version ) {
throw new Error ( '`release` argument doesn\'t match `n.n`' );
}
const ver = ( version || [])[ 0 ];
// Server 2008, 2012 and 2016 versions are ambiguous with desktop versions and must be detected at runtime.
// If `release` is omitted or we're on a Windows system, and the version number is an ambiguous version
// then use `wmic` to get the OS caption: https://msdn.microsoft.com/en-us/library/aa394531(v=vs.85).aspx
// If the resulting caption contains the year 2008, 2012 or 2016, it is a server version, so return a server OS name.
if (( ! release || release === os . release ()) && [ '6.1' , '6.2' , '6.3' , '10.0' ]. includes ( ver )) {
const stdout = execa . sync ( 'wmic' , [ 'os' , 'get' , 'Caption' ]). stdout || '' ;
const year = ( stdout . match ( /2008|2012|2016/ ) || [])[ 0 ];
if ( year ) {
return `Server ${ year } ` ;
}
}
return names . get ( ver );
};
module . exports = windowsRelease ;
/***/ }),
/***/ 87 :
/***/ ( function ( module ) {
module . exports = require ( "os" );
/***/ }),
/***/ 118 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
const os = __webpack_require__ ( 87 );
const nameMap = new Map ([
[ 19 , 'Catalina' ],
[ 18 , 'Mojave' ],
[ 17 , 'High Sierra' ],
[ 16 , 'Sierra' ],
[ 15 , 'El Capitan' ],
[ 14 , 'Yosemite' ],
[ 13 , 'Mavericks' ],
[ 12 , 'Mountain Lion' ],
[ 11 , 'Lion' ],
[ 10 , 'Snow Leopard' ],
[ 9 , 'Leopard' ],
[ 8 , 'Tiger' ],
[ 7 , 'Panther' ],
[ 6 , 'Jaguar' ],
[ 5 , 'Puma' ]
]);
const macosRelease = release => {
release = Number (( release || os . release ()). split ( '.' )[ 0 ]);
return {
name : nameMap . get ( release ),
version : '10.' + ( release - 4 )
};
};
module . exports = macosRelease ;
// TODO: remove this in the next major version
module . exports . default = macosRelease ;
/***/ }),
/***/ 126 :
/***/ ( function ( module ) {
/**
* lodash (Custom Build) <https://lodash.com/>
* Build: `lodash modularize exports="npm" -o ./`
* Copyright jQuery Foundation and other contributors <https://jquery.org/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*/
/** Used as the size to enable large array optimizations. */
var LARGE_ARRAY_SIZE = 200 ;
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__' ;
/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0 ;
/** `Object#toString` result references. */
var funcTag = '[object Function]' ,
genTag = '[object GeneratorFunction]' ;
/**
* Used to match `RegExp`
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
*/
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g ;
/** Used to detect host constructors (Safari). */
var reIsHostCtor = /^\[object .+?Constructor\]$/ ;
/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global . Object === Object && global ;
/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self . Object === Object && self ;
/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function ( 'return this' )();
/**
* A specialized version of `_.includes` for arrays without support for
* specifying an index to search from.
*
* @private
* @param {Array} [array] The array to inspect.
* @param {*} target The value to search for.
* @returns {boolean} Returns `true` if `target` is found, else `false`.
*/
function arrayIncludes ( array , value ) {
var length = array ? array . length : 0 ;
return !! length && baseIndexOf ( array , value , 0 ) > - 1 ;
}
/**
* This function is like `arrayIncludes` except that it accepts a comparator.
*
* @private
* @param {Array} [array] The array to inspect.
* @param {*} target The value to search for.
* @param {Function} comparator The comparator invoked per element.
* @returns {boolean} Returns `true` if `target` is found, else `false`.
*/
function arrayIncludesWith ( array , value , comparator ) {
var index = - 1 ,
length = array ? array . length : 0 ;
while ( ++ index < length ) {
if ( comparator ( value , array [ index ])) {
return true ;
}
}
return false ;
}
/**
* The base implementation of `_.findIndex` and `_.findLastIndex` without
* support for iteratee shorthands.
*
* @private
* @param {Array} array The array to inspect.
* @param {Function} predicate The function invoked per iteration.
* @param {number} fromIndex The index to search from.
* @param {boolean} [fromRight] Specify iterating from right to left.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function baseFindIndex ( array , predicate , fromIndex , fromRight ) {
var length = array . length ,
index = fromIndex + ( fromRight ? 1 : - 1 );
while (( fromRight ? index -- : ++ index < length )) {
if ( predicate ( array [ index ], index , array )) {
return index ;
}
}
return - 1 ;
}
/**
* The base implementation of `_.indexOf` without `fromIndex` bounds checks.
*
* @private
* @param {Array} array The array to inspect.
* @param {*} value The value to search for.
* @param {number} fromIndex The index to search from.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function baseIndexOf ( array , value , fromIndex ) {
if ( value !== value ) {
return baseFindIndex ( array , baseIsNaN , fromIndex );
}
var index = fromIndex - 1 ,
length = array . length ;
while ( ++ index < length ) {
if ( array [ index ] === value ) {
return index ;
}
}
return - 1 ;
}
/**
* The base implementation of `_.isNaN` without support for number objects.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
*/
function baseIsNaN ( value ) {
return value !== value ;
}
/**
* Checks if a cache value for `key` exists.
*
* @private
* @param {Object} cache The cache to query.
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function cacheHas ( cache , key ) {
return cache . has ( key );
}
/**
* Gets the value at `key` of `object`.
*
* @private
* @param {Object} [object] The object to query.
* @param {string} key The key of the property to get.
* @returns {*} Returns the property value.
*/
function getValue ( object , key ) {
return object == null ? undefined : object [ key ];
}
/**
* Checks if `value` is a host object in IE < 9.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a host object, else `false`.
*/
function isHostObject ( value ) {
// Many host objects are `Object` objects that can coerce to strings
// despite having improperly defined `toString` methods.
var result = false ;
if ( value != null && typeof value . toString != 'function' ) {
try {
result = !! ( value + '' );
} catch ( e ) {}
}
return result ;
}
/**
* Converts `set` to an array of its values.
*
* @private
* @param {Object} set The set to convert.
* @returns {Array} Returns the values.
*/
function setToArray ( set ) {
var index = - 1 ,
result = Array ( set . size );
set . forEach ( function ( value ) {
result [ ++ index ] = value ;
});
return result ;
}
/** Used for built-in method references. */
var arrayProto = Array . prototype ,
funcProto = Function . prototype ,
objectProto = Object . prototype ;
/** Used to detect overreaching core-js shims. */
var coreJsData = root [ '__core-js_shared__' ];
/** Used to detect methods masquerading as native. */
var maskSrcKey = ( function () {
var uid = /[^.]+$/ . exec ( coreJsData && coreJsData . keys && coreJsData . keys . IE_PROTO || '' );
return uid ? ( 'Symbol(src)_1.' + uid ) : '' ;
}());
/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto . toString ;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto . hasOwnProperty ;
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
var objectToString = objectProto . toString ;
/** Used to detect if a method is native. */
var reIsNative = RegExp ( '^' +
funcToString . call ( hasOwnProperty ). replace ( reRegExpChar , '\\$&' )
. replace ( /hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g , '$1.*?' ) + '$'
);
/** Built-in value references. */
var splice = arrayProto . splice ;
/* Built-in method references that are verified to be native. */
var Map = getNative ( root , 'Map' ),
Set = getNative ( root , 'Set' ),
nativeCreate = getNative ( Object , 'create' );
/**
* Creates a hash object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function Hash ( entries ) {
var index = - 1 ,
length = entries ? entries . length : 0 ;
this . clear ();
while ( ++ index < length ) {
var entry = entries [ index ];
this . set ( entry [ 0 ], entry [ 1 ]);
}
}
/**
* Removes all key-value entries from the hash.
*
* @private
* @name clear
* @memberOf Hash
*/
function hashClear () {
this . __data__ = nativeCreate ? nativeCreate ( null ) : {};
}
/**
* Removes `key` and its value from the hash.
*
* @private
* @name delete
* @memberOf Hash
* @param {Object} hash The hash to modify.
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function hashDelete ( key ) {
return this . has ( key ) && delete this . __data__ [ key ];
}
/**
* Gets the hash value for `key`.
*
* @private
* @name get
* @memberOf Hash
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function hashGet ( key ) {
var data = this . __data__ ;
if ( nativeCreate ) {
var result = data [ key ];
return result === HASH_UNDEFINED ? undefined : result ;
}
return hasOwnProperty . call ( data , key ) ? data [ key ] : undefined ;
}
/**
* Checks if a hash value for `key` exists.
*
* @private
* @name has
* @memberOf Hash
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function hashHas ( key ) {
var data = this . __data__ ;
return nativeCreate ? data [ key ] !== undefined : hasOwnProperty . call ( data , key );
}
/**
* Sets the hash `key` to `value`.
*
* @private
* @name set
* @memberOf Hash
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the hash instance.
*/
function hashSet ( key , value ) {
var data = this . __data__ ;
data [ key ] = ( nativeCreate && value === undefined ) ? HASH_UNDEFINED : value ;
return this ;
}
// Add methods to `Hash`.
Hash . prototype . clear = hashClear ;
Hash . prototype [ 'delete' ] = hashDelete ;
Hash . prototype . get = hashGet ;
Hash . prototype . has = hashHas ;
Hash . prototype . set = hashSet ;
/**
* Creates an list cache object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function ListCache ( entries ) {
var index = - 1 ,
length = entries ? entries . length : 0 ;
this . clear ();
while ( ++ index < length ) {
var entry = entries [ index ];
this . set ( entry [ 0 ], entry [ 1 ]);
}
}
/**
* Removes all key-value entries from the list cache.
*
* @private
* @name clear
* @memberOf ListCache
*/
function listCacheClear () {
this . __data__ = [];
}
/**
* Removes `key` and its value from the list cache.
*
* @private
* @name delete
* @memberOf ListCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function listCacheDelete ( key ) {
var data = this . __data__ ,
index = assocIndexOf ( data , key );
if ( index < 0 ) {
return false ;
}
var lastIndex = data . length - 1 ;
if ( index == lastIndex ) {
data . pop ();
} else {
splice . call ( data , index , 1 );
}
return true ;
}
/**
* Gets the list cache value for `key`.
*
* @private
* @name get
* @memberOf ListCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function listCacheGet ( key ) {
var data = this . __data__ ,
index = assocIndexOf ( data , key );
return index < 0 ? undefined : data [ index ][ 1 ];
}
/**
* Checks if a list cache value for `key` exists.
*
* @private
* @name has
* @memberOf ListCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function listCacheHas ( key ) {
return assocIndexOf ( this . __data__ , key ) > - 1 ;
}
/**
* Sets the list cache `key` to `value`.
*
* @private
* @name set
* @memberOf ListCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the list cache instance.
*/
function listCacheSet ( key , value ) {
var data = this . __data__ ,
index = assocIndexOf ( data , key );
if ( index < 0 ) {
data . push ([ key , value ]);
} else {
data [ index ][ 1 ] = value ;
}
return this ;
}
// Add methods to `ListCache`.
ListCache . prototype . clear = listCacheClear ;
ListCache . prototype [ 'delete' ] = listCacheDelete ;
ListCache . prototype . get = listCacheGet ;
ListCache . prototype . has = listCacheHas ;
ListCache . prototype . set = listCacheSet ;
/**
* Creates a map cache object to store key-value pairs.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function MapCache ( entries ) {
var index = - 1 ,
length = entries ? entries . length : 0 ;
this . clear ();
while ( ++ index < length ) {
var entry = entries [ index ];
this . set ( entry [ 0 ], entry [ 1 ]);
}
}
/**
* Removes all key-value entries from the map.
*
* @private
* @name clear
* @memberOf MapCache
*/
function mapCacheClear () {
this . __data__ = {
'hash' : new Hash ,
'map' : new ( Map || ListCache ),
'string' : new Hash
};
}
/**
* Removes `key` and its value from the map.
*
* @private
* @name delete
* @memberOf MapCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function mapCacheDelete ( key ) {
return getMapData ( this , key )[ 'delete' ]( key );
}
/**
* Gets the map value for `key`.
*
* @private
* @name get
* @memberOf MapCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function mapCacheGet ( key ) {
return getMapData ( this , key ). get ( key );
}
/**
* Checks if a map value for `key` exists.
*
* @private
* @name has
* @memberOf MapCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function mapCacheHas ( key ) {
return getMapData ( this , key ). has ( key );
}
/**
* Sets the map `key` to `value`.
*
* @private
* @name set
* @memberOf MapCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the map cache instance.
*/
function mapCacheSet ( key , value ) {
getMapData ( this , key ). set ( key , value );
return this ;
}
// Add methods to `MapCache`.
MapCache . prototype . clear = mapCacheClear ;
MapCache . prototype [ 'delete' ] = mapCacheDelete ;
MapCache . prototype . get = mapCacheGet ;
MapCache . prototype . has = mapCacheHas ;
MapCache . prototype . set = mapCacheSet ;
/**
*
* Creates an array cache object to store unique values.
*
* @private
* @constructor
* @param {Array} [values] The values to cache.
*/
function SetCache ( values ) {
var index = - 1 ,
length = values ? values . length : 0 ;
this . __data__ = new MapCache ;
while ( ++ index < length ) {
this . add ( values [ index ]);
}
}
/**
* Adds `value` to the array cache.
*
* @private
* @name add
* @memberOf SetCache
* @alias push
* @param {*} value The value to cache.
* @returns {Object} Returns the cache instance.
*/
function setCacheAdd ( value ) {
this . __data__ . set ( value , HASH_UNDEFINED );
return this ;
}
/**
* Checks if `value` is in the array cache.
*
* @private
* @name has
* @memberOf SetCache
* @param {*} value The value to search for.
* @returns {number} Returns `true` if `value` is found, else `false`.
*/
function setCacheHas ( value ) {
return this . __data__ . has ( value );
}
// Add methods to `SetCache`.
SetCache . prototype . add = SetCache . prototype . push = setCacheAdd ;
SetCache . prototype . has = setCacheHas ;
/**
* Gets the index at which the `key` is found in `array` of key-value pairs.
*
* @private
* @param {Array} array The array to inspect.
* @param {*} key The key to search for.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function assocIndexOf ( array , key ) {
var length = array . length ;
while ( length -- ) {
if ( eq ( array [ length ][ 0 ], key )) {
return length ;
}
}
return - 1 ;
}
/**
* The base implementation of `_.isNative` without bad shim checks.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a native function,
* else `false`.
*/
function baseIsNative ( value ) {
if ( ! isObject ( value ) || isMasked ( value )) {
return false ;
}
var pattern = ( isFunction ( value ) || isHostObject ( value )) ? reIsNative : reIsHostCtor ;
return pattern . test ( toSource ( value ));
}
/**
* The base implementation of `_.uniqBy` without support for iteratee shorthands.
*
* @private
* @param {Array} array The array to inspect.
* @param {Function} [iteratee] The iteratee invoked per element.
* @param {Function} [comparator] The comparator invoked per element.
* @returns {Array} Returns the new duplicate free array.
*/
function baseUniq ( array , iteratee , comparator ) {
var index = - 1 ,
includes = arrayIncludes ,
length = array . length ,
isCommon = true ,
result = [],
seen = result ;
if ( comparator ) {
isCommon = false ;
includes = arrayIncludesWith ;
}
else if ( length >= LARGE_ARRAY_SIZE ) {
var set = iteratee ? null : createSet ( array );
if ( set ) {
return setToArray ( set );
}
isCommon = false ;
includes = cacheHas ;
seen = new SetCache ;
}
else {
seen = iteratee ? [] : result ;
}
outer :
while ( ++ index < length ) {
var value = array [ index ],
computed = iteratee ? iteratee ( value ) : value ;
value = ( comparator || value !== 0 ) ? value : 0 ;
if ( isCommon && computed === computed ) {
var seenIndex = seen . length ;
while ( seenIndex -- ) {
if ( seen [ seenIndex ] === computed ) {
continue outer ;
}
}
if ( iteratee ) {
seen . push ( computed );
}
result . push ( value );
}
else if ( ! includes ( seen , computed , comparator )) {
if ( seen !== result ) {
seen . push ( computed );
}
result . push ( value );
}
}
return result ;
}
/**
* Creates a set object of `values`.
*
* @private
* @param {Array} values The values to add to the set.
* @returns {Object} Returns the new set.
*/
var createSet = ! ( Set && ( 1 / setToArray ( new Set ([, - 0 ]))[ 1 ]) == INFINITY ) ? noop : function ( values ) {
return new Set ( values );
};
/**
* Gets the data for `map`.
*
* @private
* @param {Object} map The map to query.
* @param {string} key The reference key.
* @returns {*} Returns the map data.
*/
function getMapData ( map , key ) {
var data = map . __data__ ;
return isKeyable ( key )
? data [ typeof key == 'string' ? 'string' : 'hash' ]
: data . map ;
}
/**
* Gets the native function at `key` of `object`.
*
* @private
* @param {Object} object The object to query.
* @param {string} key The key of the method to get.
* @returns {*} Returns the function if it's native, else `undefined`.
*/
function getNative ( object , key ) {
var value = getValue ( object , key );
return baseIsNative ( value ) ? value : undefined ;
}
/**
* Checks if `value` is suitable for use as unique object key.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
*/
function isKeyable ( value ) {
var type = typeof value ;
return ( type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' )
? ( value !== '__proto__' )
: ( value === null );
}
/**
* Checks if `func` has its source masked.
*
* @private
* @param {Function} func The function to check.
* @returns {boolean} Returns `true` if `func` is masked, else `false`.
*/
function isMasked ( func ) {
return !! maskSrcKey && ( maskSrcKey in func );
}
/**
* Converts `func` to its source code.
*
* @private
* @param {Function} func The function to process.
* @returns {string} Returns the source code.
*/
function toSource ( func ) {
if ( func != null ) {
try {
return funcToString . call ( func );
} catch ( e ) {}
try {
return ( func + '' );
} catch ( e ) {}
}
return '' ;
}
/**
* Creates a duplicate-free version of an array, using
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* for equality comparisons, in which only the first occurrence of each
* element is kept.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Array
* @param {Array} array The array to inspect.
* @returns {Array} Returns the new duplicate free array.
* @example
*
* _.uniq([2, 1, 2]);
* // => [2, 1]
*/
function uniq ( array ) {
return ( array && array . length )
? baseUniq ( array )
: [];
}
/**
* Performs a
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* comparison between two values to determine if they are equivalent.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
* @example
*
* var object = { 'a': 1 };
* var other = { 'a': 1 };
*
* _.eq(object, object);
* // => true
*
* _.eq(object, other);
* // => false
*
* _.eq('a', 'a');
* // => true
*
* _.eq('a', Object('a'));
* // => false
*
* _.eq(NaN, NaN);
* // => true
*/
function eq ( value , other ) {
return value === other || ( value !== value && other !== other );
}
/**
* Checks if `value` is classified as a `Function` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a function, else `false`.
* @example
*
* _.isFunction(_);
* // => true
*
* _.isFunction(/abc/);
* // => false
*/
function isFunction ( value ) {
// The use of `Object#toString` avoids issues with the `typeof` operator
// in Safari 8-9 which returns 'object' for typed array and other constructors.
var tag = isObject ( value ) ? objectToString . call ( value ) : '' ;
return tag == funcTag || tag == genTag ;
}
/**
* Checks if `value` is the
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an object, else `false`.
* @example
*
* _.isObject({});
* // => true
*
* _.isObject([1, 2, 3]);
* // => true
*
* _.isObject(_.noop);
* // => true
*
* _.isObject(null);
* // => false
*/
function isObject ( value ) {
var type = typeof value ;
return !! value && ( type == 'object' || type == 'function' );
}
/**
* This method returns `undefined`.
*
* @static
* @memberOf _
* @since 2.3.0
* @category Util
* @example
*
* _.times(2, _.noop);
* // => [undefined, undefined]
*/
function noop () {
// No operation performed.
}
module . exports = uniq ;
/***/ }),
/***/ 129 :
/***/ ( function ( module ) {
module . exports = require ( "child_process" );
/***/ }),
/***/ 143 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = withAuthorizationPrefix ;
const atob = __webpack_require__ ( 368 );
const REGEX_IS_BASIC_AUTH = /^[\w-]+:/ ;
function withAuthorizationPrefix ( authorization ) {
if ( /^(basic|bearer|token) /i . test ( authorization )) {
return authorization ;
}
try {
if ( REGEX_IS_BASIC_AUTH . test ( atob ( authorization ))) {
return `basic ${ authorization } ` ;
}
} catch ( error ) {}
if ( authorization . split ( /\./ ). length === 3 ) {
return `bearer ${ authorization } ` ;
}
return `token ${ authorization } ` ;
}
/***/ }),
/***/ 145 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
const pump = __webpack_require__ ( 453 );
const bufferStream = __webpack_require__ ( 966 );
class MaxBufferError extends Error {
constructor () {
super ( 'maxBuffer exceeded' );
this . name = 'MaxBufferError' ;
}
}
function getStream ( inputStream , options ) {
if ( ! inputStream ) {
return Promise . reject ( new Error ( 'Expected a stream' ));
}
options = Object . assign ({ maxBuffer : Infinity }, options );
const { maxBuffer } = options ;
let stream ;
return new Promise (( resolve , reject ) => {
const rejectPromise = error => {
if ( error ) { // A null check
error . bufferedData = stream . getBufferedValue ();
}
reject ( error );
};
stream = pump ( inputStream , bufferStream ( options ), error => {
if ( error ) {
rejectPromise ( error );
return ;
}
resolve ();
});
stream . on ( 'data' , () => {
if ( stream . getBufferedLength () > maxBuffer ) {
rejectPromise ( new MaxBufferError ());
}
});
}). then (() => stream . getBufferedValue ());
}
module . exports = getStream ;
module . exports . buffer = ( stream , options ) => getStream ( stream , Object . assign ({}, options , { encoding : 'buffer' }));
module . exports . array = ( stream , options ) => getStream ( stream , Object . assign ({}, options , { array : true }));
module . exports . MaxBufferError = MaxBufferError ;
/***/ }),
/***/ 148 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = paginatePlugin ;
const iterator = __webpack_require__ ( 8 );
const paginate = __webpack_require__ ( 807 );
function paginatePlugin ( octokit ) {
octokit . paginate = paginate . bind ( null , octokit );
octokit . paginate . iterator = iterator . bind ( null , octokit );
}
/***/ }),
/***/ 168 :
/***/ ( function ( module ) {
"use strict" ;
const alias = [ 'stdin' , 'stdout' , 'stderr' ];
const hasAlias = opts => alias . some ( x => Boolean ( opts [ x ]));
module . exports = opts => {
if ( ! opts ) {
return null ;
}
if ( opts . stdio && hasAlias ( opts )) {
throw new Error ( `It's not possible to provide \`stdio\` in combination with one of ${ alias . map ( x => `\` ${ x } \`` ). join ( ', ' ) } ` );
}
if ( typeof opts . stdio === 'string' ) {
return opts . stdio ;
}
const stdio = opts . stdio || [];
if ( ! Array . isArray ( stdio )) {
throw new TypeError ( `Expected \`stdio\` to be of type \`string\` or \`Array\`, got \` ${ typeof stdio } \`` );
}
const result = [];
const len = Math . max ( stdio . length , alias . length );
for ( let i = 0 ; i < len ; i ++ ) {
let value = null ;
if ( stdio [ i ] !== undefined ) {
value = stdio [ i ];
} else if ( opts [ alias [ i ]] !== undefined ) {
value = opts [ alias [ i ]];
}
result [ i ] = value ;
}
return result ;
};
/***/ }),
/***/ 190 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = authenticationPlugin ;
const beforeRequest = __webpack_require__ ( 863 );
const requestError = __webpack_require__ ( 991 );
const validate = __webpack_require__ ( 954 );
function authenticationPlugin ( octokit , options ) {
if ( ! options . auth ) {
return ;
}
validate ( options . auth );
const state = {
octokit ,
auth : options . auth
};
octokit . hook . before ( "request" , beforeRequest . bind ( null , state ));
octokit . hook . error ( "request" , requestError . bind ( null , state ));
}
/***/ }),
/***/ 197 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = isexe
isexe . sync = sync
var fs = __webpack_require__ ( 747 )
function isexe ( path , options , cb ) {
fs . stat ( path , function ( er , stat ) {
cb ( er , er ? false : checkStat ( stat , options ))
})
}
function sync ( path , options ) {
return checkStat ( fs . statSync ( path ), options )
}
function checkStat ( stat , options ) {
return stat . isFile () && checkMode ( stat , options )
}
function checkMode ( stat , options ) {
var mod = stat . mode
var uid = stat . uid
var gid = stat . gid
var myUid = options . uid !== undefined ?
options . uid : process . getuid && process . getuid ()
var myGid = options . gid !== undefined ?
options . gid : process . getgid && process . getgid ()
var u = parseInt ( '100' , 8 )
var g = parseInt ( '010' , 8 )
var o = parseInt ( '001' , 8 )
var ug = u | g
var ret = ( mod & o ) ||
( mod & g ) && gid === myGid ||
( mod & u ) && uid === myUid ||
( mod & ug ) && myUid === 0
return ret
}
/***/ }),
/***/ 198 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
var __awaiter = ( this && this . __awaiter ) || function ( thisArg , _arguments , P , generator ) {
function adopt ( value ) { return value instanceof P ? value : new P ( function ( resolve ) { resolve ( value ); }); }
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 ) : adopt ( 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 ( __webpack_require__ ( 470 ));
const coreCommand = __importStar ( __webpack_require__ ( 431 ));
const gitSourceProvider = __importStar ( __webpack_require__ ( 293 ));
const inputHelper = __importStar ( __webpack_require__ ( 821 ));
const path = __importStar ( __webpack_require__ ( 622 ));
const cleanupRepositoryPath = process . env [ 'STATE_repositoryPath' ];
function run () {
return __awaiter ( this , void 0 , void 0 , function * () {
try {
const sourceSettings = inputHelper . getInputs ();
try {
// Register problem matcher
coreCommand . issueCommand ( 'add-matcher' , {}, path . join ( __dirname , 'problem-matcher.json' ));
// Get sources
yield gitSourceProvider . getSource ( sourceSettings );
}
finally {
// Unregister problem matcher
coreCommand . issueCommand ( 'remove-matcher' , { owner : 'checkout-git' }, '' );
}
}
catch ( error ) {
core . setFailed ( error . message );
}
});
}
function cleanup () {
return __awaiter ( this , void 0 , void 0 , function * () {
try {
yield gitSourceProvider . cleanup ( cleanupRepositoryPath );
}
catch ( error ) {
core . warning ( error . message );
}
});
}
// Main
if ( ! cleanupRepositoryPath ) {
run ();
}
// Post
else {
cleanup ();
}
/***/ }),
/***/ 211 :
2019-12-09 16:54:42 -05:00
/***/ ( function ( module ) {
2019-12-03 10:28:59 -05:00
2019-12-09 16:54:42 -05:00
module . exports = require ( "https" );
2019-12-03 10:28:59 -05:00
/***/ }),
/***/ 215 :
/***/ ( function ( module ) {
2019-12-09 16:54:42 -05:00
module . exports = { "name" : "@octokit/rest" , "version" : "16.35.0" , "publishConfig" : { "access" : "public" }, "description" : "GitHub REST API client for Node.js" , "keywords" : [ "octokit" , "github" , "rest" , "api-client" ], "author" : "Gregor Martynus (https://github.com/gr2m)" , "contributors" : [{ "name" : "Mike de Boer" , "email" : "info@mikedeboer.nl" },{ "name" : "Fabian Jakobs" , "email" : "fabian@c9.io" },{ "name" : "Joe Gallo" , "email" : "joe@brassafrax.com" },{ "name" : "Gregor Martynus" , "url" : "https://github.com/gr2m" }], "repository" : "https://github.com/octokit/rest.js" , "dependencies" : { "@octokit/request" : "^5.2.0" , "@octokit/request-error" : "^1.0.2" , "atob-lite" : "^2.0.0" , "before-after-hook" : "^2.0.0" , "btoa-lite" : "^1.0.0" , "deprecation" : "^2.0.0" , "lodash.get" : "^4.4.2" , "lodash.set" : "^4.3.2" , "lodash.uniq" : "^4.5.0" , "octokit-pagination-methods" : "^1.1.0" , "once" : "^1.4.0" , "universal-user-agent" : "^4.0.0" }, "devDependencies" : { "@gimenete/type-writer" : "^0.1.3" , "@octokit/fixtures-server" : "^5.0.6" , "@octokit/graphql" : "^4.2.0" , "@types/node" : "^12.0.0" , "bundlesize" : "^0.18.0" , "chai" : "^4.1.2" , "compression-webpack-plugin" : "^3.0.0" , "cypress" : "^3.0.0" , "glob" : "^7.1.2" , "http-proxy-agent" : "^2.1.0" , "lodash.camelcase" : "^4.3.0" , "lodash.merge" : "^4.6.1" , "lodash.upperfirst" : "^4.3.1" , "mkdirp" : "^0.5.1" , "mocha" : "^6.0.0" , "mustache" : "^3.0.0" , "nock" : "^11.3.3" , "npm-run-all" : "^4.1.2" , "nyc" : "^14.0.0" , "prettier" : "^1.14.2" , "proxy" : "^1.0.0" , "semantic-release" : "^15.0.0" , "sinon" : "^7.2.4" , "sinon-chai" : "^3.0.0" , "sort-keys" : "^4.0.0" , "string-to-arraybuffer" : "^1.0.0" , "string-to-jsdoc-comment" : "^1.0.0" , "typescript" : "^3.3.1" , "webpack" : "^4.0.0" , "webpack-bundle-analyzer" : "^3.0.0" , "webpack-cli" : "^3.0.0" }, "types" : "index.d.ts" , "scripts" : { "coverage" : "nyc report --reporter=html && open coverage/index.html" , "lint" : "prettier --check '{lib,plugins,scripts,test}/**/*.{js,json,ts}' 'docs/*.{js,json}' 'docs/src/**/*' index.js README.md package.json" , "lint:fix" : "prettier --write '{lib,plugins,scripts,test}/**/*.{js,json,ts}' 'docs/*.{js,json}' 'docs/src/**/*' index.js README.md package.json" , "pretest" : "npm run -s lint" , "test" : "nyc mocha test/mocha-node-setup.js \"test/*/**/*-test.js\"" , "test:browser" : "cypress run --browser chrome" , "build" : "npm-run-all build:*" , "build:ts" : "npm run -s update-endpoints:typescript" , "prebuild:browser" : "mkdirp dist/" , "build:browser" : "npm-run-all build:browser:*" , "build:browser:development" : "webpack --mode development --entry . --output-library=Octokit --output=./dist/octokit-rest.js --profile --json > dist/bundle-stats.json" , "build:browser:production" : "webpack --mode production --entry . --plugin=compression-webpack-plugin --output-library=Octokit --output-path=./dist --output-filename=octokit-rest.min.js --devtool source-map" , "generate-bundle-report" : "webpack-bundle-analyzer dist/bundle-stats.json --mode=static --no-open --report dist/bundle-report.html" , "update-endpoints" : "npm-run-all update-endpoints:*" , "update-endpoints:fetch-json" : "node scripts/update-endpoints/fetch-json" , "update-endpoints:code" : "node scripts/update-endpoints/code" , "update-endpoints:typescript" : "node scripts/update-endpoints/typescript" , "prevalidate:ts" : "npm run -s build:ts" , "validate:ts" : "tsc --target es6 --noImplicitAny index.d.ts" , "postvalidate:ts" : "tsc --noEmit --target es6 test/typescript-validate.ts" , "start-fixtures-server" : "octokit-fixtures-server" }, "license" : "MIT" , "files" : [ "index.js" , "index.d.ts" , "lib" , "plugins" ], "nyc" : { "ignore" : [ "test" ]}, "release" : { "publish" : [ "@semantic-release/npm" ,{ "path" : "@semantic-release/github" , "assets" : [ "dist/*" , "!dist/*.map.gz" ]}]}, "bundlesize" : [{ "path" : "./dist/octokit-rest.min.js.gz" , "maxSize" : "33 kB" }], "_resolved" : "https://registry.npmjs.org/@octokit/rest/-/rest-16.35.0.tgz" , "_integrity" : "sha512-9ShFqYWo0CLoGYhA1FdtdykJuMzS/9H6vSbbQWDX4pWr4p9v+15MsH/wpd/3fIU+tSxylaNO48+PIHqOkBRx3w==" , "_from" : "@octokit/rest@16.35.0" };
2019-12-03 10:28:59 -05:00
/***/ }),
/***/ 227 :
/***/ ( function ( __unusedmodule , exports ) {
"use strict" ;
var __awaiter = ( this && this . __awaiter ) || function ( thisArg , _arguments , P , generator ) {
function adopt ( value ) { return value instanceof P ? value : new P ( function ( resolve ) { resolve ( value ); }); }
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 ) : adopt ( result . value ). then ( fulfilled , rejected ); }
step (( generator = generator . apply ( thisArg , _arguments || [])). next ());
});
};
Object . defineProperty ( exports , "__esModule" , { value : true });
function getCheckoutInfo ( git , ref , commit ) {
return __awaiter ( this , void 0 , void 0 , function * () {
if ( ! git ) {
throw new Error ( 'Arg git cannot be empty' );
}
if ( ! ref && ! commit ) {
throw new Error ( 'Args ref and commit cannot both be empty' );
}
const result = {};
const upperRef = ( ref || '' ). toUpperCase ();
// SHA only
if ( ! ref ) {
result . ref = commit ;
}
// refs/heads/
else if ( upperRef . startsWith ( 'REFS/HEADS/' )) {
const branch = ref . substring ( 'refs/heads/' . length );
result . ref = branch ;
result . startPoint = `refs/remotes/origin/ ${ branch } ` ;
}
// refs/pull/
else if ( upperRef . startsWith ( 'REFS/PULL/' )) {
const branch = ref . substring ( 'refs/pull/' . length );
result . ref = `refs/remotes/pull/ ${ branch } ` ;
}
// refs/tags/
else if ( upperRef . startsWith ( 'REFS/' )) {
result . ref = ref ;
}
// Unqualified ref, check for a matching branch or tag
else {
if ( yield git . branchExists ( true , `origin/ ${ ref } ` )) {
result . ref = ref ;
result . startPoint = `refs/remotes/origin/ ${ ref } ` ;
}
else if ( yield git . tagExists ( ` ${ ref } ` )) {
result . ref = `refs/tags/ ${ ref } ` ;
}
else {
throw new Error ( `A branch or tag with the name ' ${ ref } ' could not be found` );
}
}
return result ;
});
}
exports . getCheckoutInfo = getCheckoutInfo ;
function getRefSpec ( ref , commit ) {
if ( ! ref && ! commit ) {
throw new Error ( 'Args ref and commit cannot both be empty' );
}
const upperRef = ( ref || '' ). toUpperCase ();
// SHA
if ( commit ) {
// refs/heads
if ( upperRef . startsWith ( 'REFS/HEADS/' )) {
const branch = ref . substring ( 'refs/heads/' . length );
return [ `+ ${ commit } :refs/remotes/origin/ ${ branch } ` ];
}
// refs/pull/
else if ( upperRef . startsWith ( 'REFS/PULL/' )) {
const branch = ref . substring ( 'refs/pull/' . length );
return [ `+ ${ commit } :refs/remotes/pull/ ${ branch } ` ];
}
// refs/tags/
else if ( upperRef . startsWith ( 'REFS/TAGS/' )) {
return [ `+ ${ commit } : ${ ref } ` ];
}
// Otherwise no destination ref
else {
return [ commit ];
}
}
// Unqualified ref, check for a matching branch or tag
else if ( ! upperRef . startsWith ( 'REFS/' )) {
return [
`+refs/heads/ ${ ref } *:refs/remotes/origin/ ${ ref } *` ,
`+refs/tags/ ${ ref } *:refs/tags/ ${ ref } *`
];
}
// refs/heads/
else if ( upperRef . startsWith ( 'REFS/HEADS/' )) {
const branch = ref . substring ( 'refs/heads/' . length );
return [ `+ ${ ref } :refs/remotes/origin/ ${ branch } ` ];
}
// refs/pull/
else if ( upperRef . startsWith ( 'REFS/PULL/' )) {
const branch = ref . substring ( 'refs/pull/' . length );
return [ `+ ${ ref } :refs/remotes/pull/ ${ branch } ` ];
}
// refs/tags/
else {
return [ `+ ${ ref } : ${ ref } ` ];
}
}
exports . getRefSpec = getRefSpec ;
/***/ }),
/***/ 248 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = octokitRegisterEndpoints ;
const registerEndpoints = __webpack_require__ ( 899 );
function octokitRegisterEndpoints ( octokit ) {
octokit . registerEndpoints = registerEndpoints . bind ( null , octokit );
}
/***/ }),
/***/ 260 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
// Note: since nyc uses this module to output coverage, any lines
// that are in the direct sync flow of nyc's outputCoverage are
// ignored, since we can never get coverage for them.
var assert = __webpack_require__ ( 357 )
var signals = __webpack_require__ ( 654 )
var EE = __webpack_require__ ( 614 )
/* istanbul ignore if */
if ( typeof EE !== 'function' ) {
EE = EE . EventEmitter
}
var emitter
if ( process . __signal_exit_emitter__ ) {
emitter = process . __signal_exit_emitter__
} else {
emitter = process . __signal_exit_emitter__ = new EE ()
emitter . count = 0
emitter . emitted = {}
}
// Because this emitter is a global, we have to check to see if a
// previous version of this library failed to enable infinite listeners.
// I know what you're about to say. But literally everything about
// signal-exit is a compromise with evil. Get used to it.
if ( ! emitter . infinite ) {
emitter . setMaxListeners ( Infinity )
emitter . infinite = true
}
module . exports = function ( cb , opts ) {
assert . equal ( typeof cb , 'function' , 'a callback must be provided for exit handler' )
if ( loaded === false ) {
load ()
}
var ev = 'exit'
if ( opts && opts . alwaysLast ) {
ev = 'afterexit'
}
var remove = function () {
emitter . removeListener ( ev , cb )
if ( emitter . listeners ( 'exit' ). length === 0 &&
emitter . listeners ( 'afterexit' ). length === 0 ) {
unload ()
}
}
emitter . on ( ev , cb )
return remove
}
module . exports . unload = unload
function unload () {
if ( ! loaded ) {
return
}
loaded = false
signals . forEach ( function ( sig ) {
try {
process . removeListener ( sig , sigListeners [ sig ])
} catch ( er ) {}
})
process . emit = originalProcessEmit
process . reallyExit = originalProcessReallyExit
emitter . count -= 1
}
function emit ( event , code , signal ) {
if ( emitter . emitted [ event ]) {
return
}
emitter . emitted [ event ] = true
emitter . emit ( event , code , signal )
}
// { <signal>: <listener fn>, ... }
var sigListeners = {}
signals . forEach ( function ( sig ) {
sigListeners [ sig ] = function listener () {
// If there are no other listeners, an exit is coming!
// Simplest way: remove us and then re-send the signal.
// We know that this will kill the process, so we can
// safely emit now.
var listeners = process . listeners ( sig )
if ( listeners . length === emitter . count ) {
unload ()
emit ( 'exit' , null , sig )
/* istanbul ignore next */
emit ( 'afterexit' , null , sig )
/* istanbul ignore next */
process . kill ( process . pid , sig )
}
}
})
module . exports . signals = function () {
return signals
}
module . exports . load = load
var loaded = false
function load () {
if ( loaded ) {
return
}
loaded = true
// This is the number of onSignalExit's that are in play.
// It's important so that we can count the correct number of
// listeners on signals, and don't wait for the other one to
// handle it instead of us.
emitter . count += 1
signals = signals . filter ( function ( sig ) {
try {
process . on ( sig , sigListeners [ sig ])
return true
} catch ( er ) {
return false
}
})
process . emit = processEmit
process . reallyExit = processReallyExit
}
var originalProcessReallyExit = process . reallyExit
function processReallyExit ( code ) {
process . exitCode = code || 0
emit ( 'exit' , process . exitCode , null )
/* istanbul ignore next */
emit ( 'afterexit' , process . exitCode , null )
/* istanbul ignore next */
originalProcessReallyExit . call ( process , process . exitCode )
}
var originalProcessEmit = process . emit
function processEmit ( ev , arg ) {
if ( ev === 'exit' ) {
if ( arg !== undefined ) {
process . exitCode = arg
}
var ret = originalProcessEmit . apply ( this , arguments )
emit ( 'exit' , process . exitCode , null )
/* istanbul ignore next */
emit ( 'afterexit' , process . exitCode , null )
return ret
} else {
return originalProcessEmit . apply ( this , arguments )
}
}
/***/ }),
/***/ 262 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , { value : true });
const fs_1 = __webpack_require__ ( 747 );
const os_1 = __webpack_require__ ( 87 );
class Context {
/**
* Hydrate the context from the environment
*/
constructor () {
this . payload = {};
if ( process . env . GITHUB_EVENT_PATH ) {
if ( fs_1 . existsSync ( process . env . GITHUB_EVENT_PATH )) {
this . payload = JSON . parse ( fs_1 . readFileSync ( process . env . GITHUB_EVENT_PATH , { encoding : 'utf8' }));
}
else {
2019-12-09 16:54:42 -05:00
const path = process . env . GITHUB_EVENT_PATH ;
process . stdout . write ( `GITHUB_EVENT_PATH ${ path } does not exist ${ os_1 . EOL } ` );
2019-12-03 10:28:59 -05:00
}
}
this . eventName = process . env . GITHUB_EVENT_NAME ;
this . sha = process . env . GITHUB_SHA ;
this . ref = process . env . GITHUB_REF ;
this . workflow = process . env . GITHUB_WORKFLOW ;
this . action = process . env . GITHUB_ACTION ;
this . actor = process . env . GITHUB_ACTOR ;
}
get issue () {
const payload = this . payload ;
return Object . assign ( Object . assign ({}, this . repo ), { number : ( payload . issue || payload . pullRequest || payload ). number });
}
get repo () {
if ( process . env . GITHUB_REPOSITORY ) {
const [ owner , repo ] = process . env . GITHUB_REPOSITORY . split ( '/' );
return { owner , repo };
}
if ( this . payload . repository ) {
return {
owner : this . payload . repository . owner . login ,
repo : this . payload . repository . name
};
}
throw new Error ( "context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'" );
}
}
exports . Context = Context ;
//# sourceMappingURL=context.js.map
/***/ }),
/***/ 265 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = getPage
const deprecate = __webpack_require__ ( 370 )
const getPageLinks = __webpack_require__ ( 577 )
const HttpError = __webpack_require__ ( 297 )
function getPage ( octokit , link , which , headers ) {
deprecate ( `octokit.get ${ which . charAt ( 0 ). toUpperCase () + which . slice ( 1 ) } Page() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.` )
const url = getPageLinks ( link )[ which ]
if ( ! url ) {
const urlError = new HttpError ( `No ${ which } page found` , 404 )
return Promise . reject ( urlError )
}
const requestOptions = {
url ,
headers : applyAcceptHeader ( link , headers )
}
const promise = octokit . request ( requestOptions )
return promise
}
function applyAcceptHeader ( res , headers ) {
const previous = res . headers && res . headers [ 'x-github-media-type' ]
if ( ! previous || ( headers && headers . accept )) {
return headers
}
headers = headers || {}
headers . accept = 'application/vnd.' + previous
. replace ( '; param=' , '.' )
. replace ( '; format=' , '+' )
return headers
}
/***/ }),
/***/ 280 :
/***/ ( function ( module , exports ) {
exports = module . exports = SemVer
var debug
/* istanbul ignore next */
if ( typeof process === 'object' &&
process . env &&
process . env . NODE_DEBUG &&
/\bsemver\b/i . test ( process . env . NODE_DEBUG )) {
debug = function () {
var args = Array . prototype . slice . call ( arguments , 0 )
args . unshift ( 'SEMVER' )
console . log . apply ( console , args )
}
} else {
debug = function () {}
}
// Note: this is the semver.org version of the spec that it implements
// Not necessarily the package version of this code.
exports . SEMVER_SPEC_VERSION = '2.0.0'
var MAX_LENGTH = 256
var MAX_SAFE_INTEGER = Number . MAX_SAFE_INTEGER ||
/* istanbul ignore next */ 9007199254740991
// Max safe segment length for coercion.
var MAX_SAFE_COMPONENT_LENGTH = 16
// The actual regexps go on exports.re
var re = exports . re = []
var src = exports . src = []
var R = 0
// The following Regular Expressions can be used for tokenizing,
// validating, and parsing SemVer version strings.
// ## Numeric Identifier
// A single `0`, or a non-zero digit followed by zero or more digits.
var NUMERICIDENTIFIER = R ++
src [ NUMERICIDENTIFIER ] = '0|[1-9]\\d*'
var NUMERICIDENTIFIERLOOSE = R ++
src [ NUMERICIDENTIFIERLOOSE ] = '[0-9]+'
// ## Non-numeric Identifier
// Zero or more digits, followed by a letter or hyphen, and then zero or
// more letters, digits, or hyphens.
var NONNUMERICIDENTIFIER = R ++
src [ NONNUMERICIDENTIFIER ] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
// ## Main Version
// Three dot-separated numeric identifiers.
var MAINVERSION = R ++
src [ MAINVERSION ] = '(' + src [ NUMERICIDENTIFIER ] + ')\\.' +
'(' + src [ NUMERICIDENTIFIER ] + ')\\.' +
'(' + src [ NUMERICIDENTIFIER ] + ')'
var MAINVERSIONLOOSE = R ++
src [ MAINVERSIONLOOSE ] = '(' + src [ NUMERICIDENTIFIERLOOSE ] + ')\\.' +
'(' + src [ NUMERICIDENTIFIERLOOSE ] + ')\\.' +
'(' + src [ NUMERICIDENTIFIERLOOSE ] + ')'
// ## Pre-release Version Identifier
// A numeric identifier, or a non-numeric identifier.
var PRERELEASEIDENTIFIER = R ++
src [ PRERELEASEIDENTIFIER ] = '(?:' + src [ NUMERICIDENTIFIER ] +
'|' + src [ NONNUMERICIDENTIFIER ] + ')'
var PRERELEASEIDENTIFIERLOOSE = R ++
src [ PRERELEASEIDENTIFIERLOOSE ] = '(?:' + src [ NUMERICIDENTIFIERLOOSE ] +
'|' + src [ NONNUMERICIDENTIFIER ] + ')'
// ## Pre-release Version
// Hyphen, followed by one or more dot-separated pre-release version
// identifiers.
var PRERELEASE = R ++
src [ PRERELEASE ] = '(?:-(' + src [ PRERELEASEIDENTIFIER ] +
'(?:\\.' + src [ PRERELEASEIDENTIFIER ] + ')*))'
var PRERELEASELOOSE = R ++
src [ PRERELEASELOOSE ] = '(?:-?(' + src [ PRERELEASEIDENTIFIERLOOSE ] +
'(?:\\.' + src [ PRERELEASEIDENTIFIERLOOSE ] + ')*))'
// ## Build Metadata Identifier
// Any combination of digits, letters, or hyphens.
var BUILDIDENTIFIER = R ++
src [ BUILDIDENTIFIER ] = '[0-9A-Za-z-]+'
// ## Build Metadata
// Plus sign, followed by one or more period-separated build metadata
// identifiers.
var BUILD = R ++
src [ BUILD ] = '(?:\\+(' + src [ BUILDIDENTIFIER ] +
'(?:\\.' + src [ BUILDIDENTIFIER ] + ')*))'
// ## Full Version String
// A main version, followed optionally by a pre-release version and
// build metadata.
// Note that the only major, minor, patch, and pre-release sections of
// the version string are capturing groups. The build metadata is not a
// capturing group, because it should not ever be used in version
// comparison.
var FULL = R ++
var FULLPLAIN = 'v?' + src [ MAINVERSION ] +
src [ PRERELEASE ] + '?' +
src [ BUILD ] + '?'
src [ FULL ] = '^' + FULLPLAIN + '$'
// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
// common in the npm registry.
var LOOSEPLAIN = '[v=\\s]*' + src [ MAINVERSIONLOOSE ] +
src [ PRERELEASELOOSE ] + '?' +
src [ BUILD ] + '?'
var LOOSE = R ++
src [ LOOSE ] = '^' + LOOSEPLAIN + '$'
var GTLT = R ++
src [ GTLT ] = '((?:<|>)?=?)'
// Something like "2.*" or "1.2.x".
// Note that "x.x" is a valid xRange identifer, meaning "any version"
// Only the first item is strictly required.
var XRANGEIDENTIFIERLOOSE = R ++
src [ XRANGEIDENTIFIERLOOSE ] = src [ NUMERICIDENTIFIERLOOSE ] + '|x|X|\\*'
var XRANGEIDENTIFIER = R ++
src [ XRANGEIDENTIFIER ] = src [ NUMERICIDENTIFIER ] + '|x|X|\\*'
var XRANGEPLAIN = R ++
src [ XRANGEPLAIN ] = '[v=\\s]*(' + src [ XRANGEIDENTIFIER ] + ')' +
'(?:\\.(' + src [ XRANGEIDENTIFIER ] + ')' +
'(?:\\.(' + src [ XRANGEIDENTIFIER ] + ')' +
'(?:' + src [ PRERELEASE ] + ')?' +
src [ BUILD ] + '?' +
')?)?'
var XRANGEPLAINLOOSE = R ++
src [ XRANGEPLAINLOOSE ] = '[v=\\s]*(' + src [ XRANGEIDENTIFIERLOOSE ] + ')' +
'(?:\\.(' + src [ XRANGEIDENTIFIERLOOSE ] + ')' +
'(?:\\.(' + src [ XRANGEIDENTIFIERLOOSE ] + ')' +
'(?:' + src [ PRERELEASELOOSE ] + ')?' +
src [ BUILD ] + '?' +
')?)?'
var XRANGE = R ++
src [ XRANGE ] = '^' + src [ GTLT ] + '\\s*' + src [ XRANGEPLAIN ] + '$'
var XRANGELOOSE = R ++
src [ XRANGELOOSE ] = '^' + src [ GTLT ] + '\\s*' + src [ XRANGEPLAINLOOSE ] + '$'
// Coercion.
// Extract anything that could conceivably be a part of a valid semver
var COERCE = R ++
src [ COERCE ] = '(?:^|[^\\d])' +
'(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
'(?:$|[^\\d])'
// Tilde ranges.
// Meaning is "reasonably at or greater than"
var LONETILDE = R ++
src [ LONETILDE ] = '(?:~>?)'
var TILDETRIM = R ++
src [ TILDETRIM ] = '(\\s*)' + src [ LONETILDE ] + '\\s+'
re [ TILDETRIM ] = new RegExp ( src [ TILDETRIM ], 'g' )
var tildeTrimReplace = '$1~'
var TILDE = R ++
src [ TILDE ] = '^' + src [ LONETILDE ] + src [ XRANGEPLAIN ] + '$'
var TILDELOOSE = R ++
src [ TILDELOOSE ] = '^' + src [ LONETILDE ] + src [ XRANGEPLAINLOOSE ] + '$'
// Caret ranges.
// Meaning is "at least and backwards compatible with"
var LONECARET = R ++
src [ LONECARET ] = '(?:\\^)'
var CARETTRIM = R ++
src [ CARETTRIM ] = '(\\s*)' + src [ LONECARET ] + '\\s+'
re [ CARETTRIM ] = new RegExp ( src [ CARETTRIM ], 'g' )
var caretTrimReplace = '$1^'
var CARET = R ++
src [ CARET ] = '^' + src [ LONECARET ] + src [ XRANGEPLAIN ] + '$'
var CARETLOOSE = R ++
src [ CARETLOOSE ] = '^' + src [ LONECARET ] + src [ XRANGEPLAINLOOSE ] + '$'
// A simple gt/lt/eq thing, or just "" to indicate "any version"
var COMPARATORLOOSE = R ++
src [ COMPARATORLOOSE ] = '^' + src [ GTLT ] + '\\s*(' + LOOSEPLAIN + ')$|^$'
var COMPARATOR = R ++
src [ COMPARATOR ] = '^' + src [ GTLT ] + '\\s*(' + FULLPLAIN + ')$|^$'
// An expression to strip any whitespace between the gtlt and the thing
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
var COMPARATORTRIM = R ++
src [ COMPARATORTRIM ] = '(\\s*)' + src [ GTLT ] +
'\\s*(' + LOOSEPLAIN + '|' + src [ XRANGEPLAIN ] + ')'
// this one has to use the /g flag
re [ COMPARATORTRIM ] = new RegExp ( src [ COMPARATORTRIM ], 'g' )
var comparatorTrimReplace = '$1$2$3'
// Something like `1.2.3 - 1.2.4`
// Note that these all use the loose form, because they'll be
// checked against either the strict or loose comparator form
// later.
var HYPHENRANGE = R ++
src [ HYPHENRANGE ] = '^\\s*(' + src [ XRANGEPLAIN ] + ')' +
'\\s+-\\s+' +
'(' + src [ XRANGEPLAIN ] + ')' +
'\\s*$'
var HYPHENRANGELOOSE = R ++
src [ HYPHENRANGELOOSE ] = '^\\s*(' + src [ XRANGEPLAINLOOSE ] + ')' +
'\\s+-\\s+' +
'(' + src [ XRANGEPLAINLOOSE ] + ')' +
'\\s*$'
// Star ranges basically just allow anything at all.
var STAR = R ++
src [ STAR ] = '(<|>)?=?\\s*\\*'
// Compile to actual regexp objects.
// All are flag-free, unless they were created above with a flag.
for ( var i = 0 ; i < R ; i ++ ) {
debug ( i , src [ i ])
if ( ! re [ i ]) {
re [ i ] = new RegExp ( src [ i ])
}
}
exports . parse = parse
function parse ( version , options ) {
if ( ! options || typeof options !== 'object' ) {
options = {
loose : !! options ,
includePrerelease : false
}
}
if ( version instanceof SemVer ) {
return version
}
if ( typeof version !== 'string' ) {
return null
}
if ( version . length > MAX_LENGTH ) {
return null
}
var r = options . loose ? re [ LOOSE ] : re [ FULL ]
if ( ! r . test ( version )) {
return null
}
try {
return new SemVer ( version , options )
} catch ( er ) {
return null
}
}
exports . valid = valid
function valid ( version , options ) {
var v = parse ( version , options )
return v ? v . version : null
}
exports . clean = clean
function clean ( version , options ) {
var s = parse ( version . trim (). replace ( /^[=v]+/ , '' ), options )
return s ? s . version : null
}
exports . SemVer = SemVer
function SemVer ( version , options ) {
if ( ! options || typeof options !== 'object' ) {
options = {
loose : !! options ,
includePrerelease : false
}
}
if ( version instanceof SemVer ) {
if ( version . loose === options . loose ) {
return version
} else {
version = version . version
}
} else if ( typeof version !== 'string' ) {
throw new TypeError ( 'Invalid Version: ' + version )
}
if ( version . length > MAX_LENGTH ) {
throw new TypeError ( 'version is longer than ' + MAX_LENGTH + ' characters' )
}
if ( ! ( this instanceof SemVer )) {
return new SemVer ( version , options )
}
debug ( 'SemVer' , version , options )
this . options = options
this . loose = !! options . loose
var m = version . trim (). match ( options . loose ? re [ LOOSE ] : re [ FULL ])
if ( ! m ) {
throw new TypeError ( 'Invalid Version: ' + version )
}
this . raw = version
// these are actually numbers
this . major = + m [ 1 ]
this . minor = + m [ 2 ]
this . patch = + m [ 3 ]
if ( this . major > MAX_SAFE_INTEGER || this . major < 0 ) {
throw new TypeError ( 'Invalid major version' )
}
if ( this . minor > MAX_SAFE_INTEGER || this . minor < 0 ) {
throw new TypeError ( 'Invalid minor version' )
}
if ( this . patch > MAX_SAFE_INTEGER || this . patch < 0 ) {
throw new TypeError ( 'Invalid patch version' )
}
// numberify any prerelease numeric ids
if ( ! m [ 4 ]) {
this . prerelease = []
} else {
this . prerelease = m [ 4 ]. split ( '.' ). map ( function ( id ) {
if ( /^[0-9]+$/ . test ( id )) {
var num = + id
if ( num >= 0 && num < MAX_SAFE_INTEGER ) {
return num
}
}
return id
})
}
this . build = m [ 5 ] ? m [ 5 ]. split ( '.' ) : []
this . format ()
}
SemVer . prototype . format = function () {
this . version = this . major + '.' + this . minor + '.' + this . patch
if ( this . prerelease . length ) {
this . version += '-' + this . prerelease . join ( '.' )
}
return this . version
}
SemVer . prototype . toString = function () {
return this . version
}
SemVer . prototype . compare = function ( other ) {
debug ( 'SemVer.compare' , this . version , this . options , other )
if ( ! ( other instanceof SemVer )) {
other = new SemVer ( other , this . options )
}
return this . compareMain ( other ) || this . comparePre ( other )
}
SemVer . prototype . compareMain = function ( other ) {
if ( ! ( other instanceof SemVer )) {
other = new SemVer ( other , this . options )
}
return compareIdentifiers ( this . major , other . major ) ||
compareIdentifiers ( this . minor , other . minor ) ||
compareIdentifiers ( this . patch , other . patch )
}
SemVer . prototype . comparePre = function ( other ) {
if ( ! ( other instanceof SemVer )) {
other = new SemVer ( other , this . options )
}
// NOT having a prerelease is > having one
if ( this . prerelease . length && ! other . prerelease . length ) {
return - 1
} else if ( ! this . prerelease . length && other . prerelease . length ) {
return 1
} else if ( ! this . prerelease . length && ! other . prerelease . length ) {
return 0
}
var i = 0
do {
var a = this . prerelease [ i ]
var b = other . prerelease [ i ]
debug ( 'prerelease compare' , i , a , b )
if ( a === undefined && b === undefined ) {
return 0
} else if ( b === undefined ) {
return 1
} else if ( a === undefined ) {
return - 1
} else if ( a === b ) {
continue
} else {
return compareIdentifiers ( a , b )
}
} while ( ++ i )
}
// preminor will bump the version up to the next minor release, and immediately
// down to pre-release. premajor and prepatch work the same way.
SemVer . prototype . inc = function ( release , identifier ) {
switch ( release ) {
case 'premajor' :
this . prerelease . length = 0
this . patch = 0
this . minor = 0
this . major ++
this . inc ( 'pre' , identifier )
break
case 'preminor' :
this . prerelease . length = 0
this . patch = 0
this . minor ++
this . inc ( 'pre' , identifier )
break
case 'prepatch' :
// If this is already a prerelease, it will bump to the next version
// drop any prereleases that might already exist, since they are not
// relevant at this point.
this . prerelease . length = 0
this . inc ( 'patch' , identifier )
this . inc ( 'pre' , identifier )
break
// If the input is a non-prerelease version, this acts the same as
// prepatch.
case 'prerelease' :
if ( this . prerelease . length === 0 ) {
this . inc ( 'patch' , identifier )
}
this . inc ( 'pre' , identifier )
break
case 'major' :
// If this is a pre-major version, bump up to the same major version.
// Otherwise increment major.
// 1.0.0-5 bumps to 1.0.0
// 1.1.0 bumps to 2.0.0
if ( this . minor !== 0 ||
this . patch !== 0 ||
this . prerelease . length === 0 ) {
this . major ++
}
this . minor = 0
this . patch = 0
this . prerelease = []
break
case 'minor' :
// If this is a pre-minor version, bump up to the same minor version.
// Otherwise increment minor.
// 1.2.0-5 bumps to 1.2.0
// 1.2.1 bumps to 1.3.0
if ( this . patch !== 0 || this . prerelease . length === 0 ) {
this . minor ++
}
this . patch = 0
this . prerelease = []
break
case 'patch' :
// If this is not a pre-release version, it will increment the patch.
// If it is a pre-release it will bump up to the same patch version.
// 1.2.0-5 patches to 1.2.0
// 1.2.0 patches to 1.2.1
if ( this . prerelease . length === 0 ) {
this . patch ++
}
this . prerelease = []
break
// This probably shouldn't be used publicly.
// 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
case 'pre' :
if ( this . prerelease . length === 0 ) {
this . prerelease = [ 0 ]
} else {
var i = this . prerelease . length
while ( -- i >= 0 ) {
if ( typeof this . prerelease [ i ] === 'number' ) {
this . prerelease [ i ] ++
i = - 2
}
}
if ( i === - 1 ) {
// didn't increment anything
this . prerelease . push ( 0 )
}
}
if ( identifier ) {
// 1.2.0-beta.1 bumps to 1.2.0-beta.2,
// 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
if ( this . prerelease [ 0 ] === identifier ) {
if ( isNaN ( this . prerelease [ 1 ])) {
this . prerelease = [ identifier , 0 ]
}
} else {
this . prerelease = [ identifier , 0 ]
}
}
break
default :
throw new Error ( 'invalid increment argument: ' + release )
}
this . format ()
this . raw = this . version
return this
}
exports . inc = inc
function inc ( version , release , loose , identifier ) {
if ( typeof ( loose ) === 'string' ) {
identifier = loose
loose = undefined
}
try {
return new SemVer ( version , loose ). inc ( release , identifier ). version
} catch ( er ) {
return null
}
}
exports . diff = diff
function diff ( version1 , version2 ) {
if ( eq ( version1 , version2 )) {
return null
} else {
var v1 = parse ( version1 )
var v2 = parse ( version2 )
var prefix = ''
if ( v1 . prerelease . length || v2 . prerelease . length ) {
prefix = 'pre'
var defaultResult = 'prerelease'
}
for ( var key in v1 ) {
if ( key === 'major' || key === 'minor' || key === 'patch' ) {
if ( v1 [ key ] !== v2 [ key ]) {
return prefix + key
}
}
}
return defaultResult // may be undefined
}
}
exports . compareIdentifiers = compareIdentifiers
var numeric = /^[0-9]+$/
function compareIdentifiers ( a , b ) {
var anum = numeric . test ( a )
var bnum = numeric . test ( b )
if ( anum && bnum ) {
a = + a
b = + b
}
return a === b ? 0
: ( anum && ! bnum ) ? - 1
: ( bnum && ! anum ) ? 1
: a < b ? - 1
: 1
}
exports . rcompareIdentifiers = rcompareIdentifiers
function rcompareIdentifiers ( a , b ) {
return compareIdentifiers ( b , a )
}
exports . major = major
function major ( a , loose ) {
return new SemVer ( a , loose ). major
}
exports . minor = minor
function minor ( a , loose ) {
return new SemVer ( a , loose ). minor
}
exports . patch = patch
function patch ( a , loose ) {
return new SemVer ( a , loose ). patch
}
exports . compare = compare
function compare ( a , b , loose ) {
return new SemVer ( a , loose ). compare ( new SemVer ( b , loose ))
}
exports . compareLoose = compareLoose
function compareLoose ( a , b ) {
return compare ( a , b , true )
}
exports . rcompare = rcompare
function rcompare ( a , b , loose ) {
return compare ( b , a , loose )
}
exports . sort = sort
function sort ( list , loose ) {
return list . sort ( function ( a , b ) {
return exports . compare ( a , b , loose )
})
}
exports . rsort = rsort
function rsort ( list , loose ) {
return list . sort ( function ( a , b ) {
return exports . rcompare ( a , b , loose )
})
}
exports . gt = gt
function gt ( a , b , loose ) {
return compare ( a , b , loose ) > 0
}
exports . lt = lt
function lt ( a , b , loose ) {
return compare ( a , b , loose ) < 0
}
exports . eq = eq
function eq ( a , b , loose ) {
return compare ( a , b , loose ) === 0
}
exports . neq = neq
function neq ( a , b , loose ) {
return compare ( a , b , loose ) !== 0
}
exports . gte = gte
function gte ( a , b , loose ) {
return compare ( a , b , loose ) >= 0
}
exports . lte = lte
function lte ( a , b , loose ) {
return compare ( a , b , loose ) <= 0
}
exports . cmp = cmp
function cmp ( a , op , b , loose ) {
switch ( op ) {
case '===' :
if ( typeof a === 'object' )
a = a . version
if ( typeof b === 'object' )
b = b . version
return a === b
case '!==' :
if ( typeof a === 'object' )
a = a . version
if ( typeof b === 'object' )
b = b . version
return a !== b
case '' :
case '=' :
case '==' :
return eq ( a , b , loose )
case '!=' :
return neq ( a , b , loose )
case '>' :
return gt ( a , b , loose )
case '>=' :
return gte ( a , b , loose )
case '<' :
return lt ( a , b , loose )
case '<=' :
return lte ( a , b , loose )
default :
throw new TypeError ( 'Invalid operator: ' + op )
}
}
exports . Comparator = Comparator
function Comparator ( comp , options ) {
if ( ! options || typeof options !== 'object' ) {
options = {
loose : !! options ,
includePrerelease : false
}
}
if ( comp instanceof Comparator ) {
if ( comp . loose === !! options . loose ) {
return comp
} else {
comp = comp . value
}
}
if ( ! ( this instanceof Comparator )) {
return new Comparator ( comp , options )
}
debug ( 'comparator' , comp , options )
this . options = options
this . loose = !! options . loose
this . parse ( comp )
if ( this . semver === ANY ) {
this . value = ''
} else {
this . value = this . operator + this . semver . version
}
debug ( 'comp' , this )
}
var ANY = {}
Comparator . prototype . parse = function ( comp ) {
var r = this . options . loose ? re [ COMPARATORLOOSE ] : re [ COMPARATOR ]
var m = comp . match ( r )
if ( ! m ) {
throw new TypeError ( 'Invalid comparator: ' + comp )
}
this . operator = m [ 1 ]
if ( this . operator === '=' ) {
this . operator = ''
}
// if it literally is just '>' or '' then allow anything.
if ( ! m [ 2 ]) {
this . semver = ANY
} else {
this . semver = new SemVer ( m [ 2 ], this . options . loose )
}
}
Comparator . prototype . toString = function () {
return this . value
}
Comparator . prototype . test = function ( version ) {
debug ( 'Comparator.test' , version , this . options . loose )
if ( this . semver === ANY ) {
return true
}
if ( typeof version === 'string' ) {
version = new SemVer ( version , this . options )
}
return cmp ( version , this . operator , this . semver , this . options )
}
Comparator . prototype . intersects = function ( comp , options ) {
if ( ! ( comp instanceof Comparator )) {
throw new TypeError ( 'a Comparator is required' )
}
if ( ! options || typeof options !== 'object' ) {
options = {
loose : !! options ,
includePrerelease : false
}
}
var rangeTmp
if ( this . operator === '' ) {
rangeTmp = new Range ( comp . value , options )
return satisfies ( this . value , rangeTmp , options )
} else if ( comp . operator === '' ) {
rangeTmp = new Range ( this . value , options )
return satisfies ( comp . semver , rangeTmp , options )
}
var sameDirectionIncreasing =
( this . operator === '>=' || this . operator === '>' ) &&
( comp . operator === '>=' || comp . operator === '>' )
var sameDirectionDecreasing =
( this . operator === '<=' || this . operator === '<' ) &&
( comp . operator === '<=' || comp . operator === '<' )
var sameSemVer = this . semver . version === comp . semver . version
var differentDirectionsInclusive =
( this . operator === '>=' || this . operator === '<=' ) &&
( comp . operator === '>=' || comp . operator === '<=' )
var oppositeDirectionsLessThan =
cmp ( this . semver , '<' , comp . semver , options ) &&
(( this . operator === '>=' || this . operator === '>' ) &&
( comp . operator === '<=' || comp . operator === '<' ))
var oppositeDirectionsGreaterThan =
cmp ( this . semver , '>' , comp . semver , options ) &&
(( this . operator === '<=' || this . operator === '<' ) &&
( comp . operator === '>=' || comp . operator === '>' ))
return sameDirectionIncreasing || sameDirectionDecreasing ||
( sameSemVer && differentDirectionsInclusive ) ||
oppositeDirectionsLessThan || oppositeDirectionsGreaterThan
}
exports . Range = Range
function Range ( range , options ) {
if ( ! options || typeof options !== 'object' ) {
options = {
loose : !! options ,
includePrerelease : false
}
}
if ( range instanceof Range ) {
if ( range . loose === !! options . loose &&
range . includePrerelease === !! options . includePrerelease ) {
return range
} else {
return new Range ( range . raw , options )
}
}
if ( range instanceof Comparator ) {
return new Range ( range . value , options )
}
if ( ! ( this instanceof Range )) {
return new Range ( range , options )
}
this . options = options
this . loose = !! options . loose
this . includePrerelease = !! options . includePrerelease
// First, split based on boolean or ||
this . raw = range
this . set = range . split ( /\s*\|\|\s*/ ). map ( function ( range ) {
return this . parseRange ( range . trim ())
}, this ). filter ( function ( c ) {
// throw out any that are not relevant for whatever reason
return c . length
})
if ( ! this . set . length ) {
throw new TypeError ( 'Invalid SemVer Range: ' + range )
}
this . format ()
}
Range . prototype . format = function () {
this . range = this . set . map ( function ( comps ) {
return comps . join ( ' ' ). trim ()
}). join ( '||' ). trim ()
return this . range
}
Range . prototype . toString = function () {
return this . range
}
Range . prototype . parseRange = function ( range ) {
var loose = this . options . loose
range = range . trim ()
// `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
var hr = loose ? re [ HYPHENRANGELOOSE ] : re [ HYPHENRANGE ]
range = range . replace ( hr , hyphenReplace )
debug ( 'hyphen replace' , range )
// `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
range = range . replace ( re [ COMPARATORTRIM ], comparatorTrimReplace )
debug ( 'comparator trim' , range , re [ COMPARATORTRIM ])
// `~ 1.2.3` => `~1.2.3`
range = range . replace ( re [ TILDETRIM ], tildeTrimReplace )
// `^ 1.2.3` => `^1.2.3`
range = range . replace ( re [ CARETTRIM ], caretTrimReplace )
// normalize spaces
range = range . split ( /\s+/ ). join ( ' ' )
// At this point, the range is completely trimmed and
// ready to be split into comparators.
var compRe = loose ? re [ COMPARATORLOOSE ] : re [ COMPARATOR ]
var set = range . split ( ' ' ). map ( function ( comp ) {
return parseComparator ( comp , this . options )
}, this ). join ( ' ' ). split ( /\s+/ )
if ( this . options . loose ) {
// in loose mode, throw out any that are not valid comparators
set = set . filter ( function ( comp ) {
return !! comp . match ( compRe )
})
}
set = set . map ( function ( comp ) {
return new Comparator ( comp , this . options )
}, this )
return set
}
Range . prototype . intersects = function ( range , options ) {
if ( ! ( range instanceof Range )) {
throw new TypeError ( 'a Range is required' )
}
return this . set . some ( function ( thisComparators ) {
return thisComparators . every ( function ( thisComparator ) {
return range . set . some ( function ( rangeComparators ) {
return rangeComparators . every ( function ( rangeComparator ) {
return thisComparator . intersects ( rangeComparator , options )
})
})
})
})
}
// Mostly just for testing and legacy API reasons
exports . toComparators = toComparators
function toComparators ( range , options ) {
return new Range ( range , options ). set . map ( function ( comp ) {
return comp . map ( function ( c ) {
return c . value
}). join ( ' ' ). trim (). split ( ' ' )
})
}
// comprised of xranges, tildes, stars, and gtlt's at this point.
// already replaced the hyphen ranges
// turn into a set of JUST comparators.
function parseComparator ( comp , options ) {
debug ( 'comp' , comp , options )
comp = replaceCarets ( comp , options )
debug ( 'caret' , comp )
comp = replaceTildes ( comp , options )
debug ( 'tildes' , comp )
comp = replaceXRanges ( comp , options )
debug ( 'xrange' , comp )
comp = replaceStars ( comp , options )
debug ( 'stars' , comp )
return comp
}
function isX ( id ) {
return ! id || id . toLowerCase () === 'x' || id === '*'
}
// ~, ~> --> * (any, kinda silly)
// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
function replaceTildes ( comp , options ) {
return comp . trim (). split ( /\s+/ ). map ( function ( comp ) {
return replaceTilde ( comp , options )
}). join ( ' ' )
}
function replaceTilde ( comp , options ) {
var r = options . loose ? re [ TILDELOOSE ] : re [ TILDE ]
return comp . replace ( r , function ( _ , M , m , p , pr ) {
debug ( 'tilde' , comp , _ , M , m , p , pr )
var ret
if ( isX ( M )) {
ret = ''
} else if ( isX ( m )) {
ret = '>=' + M + '.0.0 <' + ( + M + 1 ) + '.0.0'
} else if ( isX ( p )) {
// ~1.2 == >=1.2.0 <1.3.0
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + ( + m + 1 ) + '.0'
} else if ( pr ) {
debug ( 'replaceTilde pr' , pr )
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
' <' + M + '.' + ( + m + 1 ) + '.0'
} else {
// ~1.2.3 == >=1.2.3 <1.3.0
ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + ( + m + 1 ) + '.0'
}
debug ( 'tilde return' , ret )
return ret
})
}
// ^ --> * (any, kinda silly)
// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
// ^1.2.3 --> >=1.2.3 <2.0.0
// ^1.2.0 --> >=1.2.0 <2.0.0
function replaceCarets ( comp , options ) {
return comp . trim (). split ( /\s+/ ). map ( function ( comp ) {
return replaceCaret ( comp , options )
}). join ( ' ' )
}
function replaceCaret ( comp , options ) {
debug ( 'caret' , comp , options )
var r = options . loose ? re [ CARETLOOSE ] : re [ CARET ]
return comp . replace ( r , function ( _ , M , m , p , pr ) {
debug ( 'caret' , comp , _ , M , m , p , pr )
var ret
if ( isX ( M )) {
ret = ''
} else if ( isX ( m )) {
ret = '>=' + M + '.0.0 <' + ( + M + 1 ) + '.0.0'
} else if ( isX ( p )) {
if ( M === '0' ) {
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + ( + m + 1 ) + '.0'
} else {
ret = '>=' + M + '.' + m + '.0 <' + ( + M + 1 ) + '.0.0'
}
} else if ( pr ) {
debug ( 'replaceCaret pr' , pr )
if ( M === '0' ) {
if ( m === '0' ) {
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
' <' + M + '.' + m + '.' + ( + p + 1 )
} else {
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
' <' + M + '.' + ( + m + 1 ) + '.0'
}
} else {
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
' <' + ( + M + 1 ) + '.0.0'
}
} else {
debug ( 'no pr' )
if ( M === '0' ) {
if ( m === '0' ) {
ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + m + '.' + ( + p + 1 )
} else {
ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + ( + m + 1 ) + '.0'
}
} else {
ret = '>=' + M + '.' + m + '.' + p +
' <' + ( + M + 1 ) + '.0.0'
}
}
debug ( 'caret return' , ret )
return ret
})
}
function replaceXRanges ( comp , options ) {
debug ( 'replaceXRanges' , comp , options )
return comp . split ( /\s+/ ). map ( function ( comp ) {
return replaceXRange ( comp , options )
}). join ( ' ' )
}
function replaceXRange ( comp , options ) {
comp = comp . trim ()
var r = options . loose ? re [ XRANGELOOSE ] : re [ XRANGE ]
return comp . replace ( r , function ( ret , gtlt , M , m , p , pr ) {
debug ( 'xRange' , comp , ret , gtlt , M , m , p , pr )
var xM = isX ( M )
var xm = xM || isX ( m )
var xp = xm || isX ( p )
var anyX = xp
if ( gtlt === '=' && anyX ) {
gtlt = ''
}
if ( xM ) {
if ( gtlt === '>' || gtlt === '<' ) {
// nothing is allowed
ret = '<0.0.0'
} else {
// nothing is forbidden
ret = '*'
}
} else if ( gtlt && anyX ) {
// we know patch is an x, because we have any x at all.
// replace X with 0
if ( xm ) {
m = 0
}
p = 0
if ( gtlt === '>' ) {
// >1 => >=2.0.0
// >1.2 => >=1.3.0
// >1.2.3 => >= 1.2.4
gtlt = '>='
if ( xm ) {
M = + M + 1
m = 0
p = 0
} else {
m = + m + 1
p = 0
}
} else if ( gtlt === '<=' ) {
// <=0.7.x is actually <0.8.0, since any 0.7.x should
// pass. Similarly, <=7.x is actually <8.0.0, etc.
gtlt = '<'
if ( xm ) {
M = + M + 1
} else {
m = + m + 1
}
}
ret = gtlt + M + '.' + m + '.' + p
} else if ( xm ) {
ret = '>=' + M + '.0.0 <' + ( + M + 1 ) + '.0.0'
} else if ( xp ) {
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + ( + m + 1 ) + '.0'
}
debug ( 'xRange return' , ret )
return ret
})
}
// Because * is AND-ed with everything else in the comparator,
// and '' means "any version", just remove the *s entirely.
function replaceStars ( comp , options ) {
debug ( 'replaceStars' , comp , options )
// Looseness is ignored here. star is always as loose as it gets!
return comp . trim (). replace ( re [ STAR ], '' )
}
// This function is passed to string.replace(re[HYPHENRANGE])
// M, m, patch, prerelease, build
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
// 1.2 - 3.4 => >=1.2.0 <3.5.0
function hyphenReplace ( $0 ,
from , fM , fm , fp , fpr , fb ,
to , tM , tm , tp , tpr , tb ) {
if ( isX ( fM )) {
from = ''
} else if ( isX ( fm )) {
from = '>=' + fM + '.0.0'
} else if ( isX ( fp )) {
from = '>=' + fM + '.' + fm + '.0'
} else {
from = '>=' + from
}
if ( isX ( tM )) {
to = ''
} else if ( isX ( tm )) {
to = '<' + ( + tM + 1 ) + '.0.0'
} else if ( isX ( tp )) {
to = '<' + tM + '.' + ( + tm + 1 ) + '.0'
} else if ( tpr ) {
to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr
} else {
to = '<=' + to
}
return ( from + ' ' + to ). trim ()
}
// if ANY of the sets match ALL of its comparators, then pass
Range . prototype . test = function ( version ) {
if ( ! version ) {
return false
}
if ( typeof version === 'string' ) {
version = new SemVer ( version , this . options )
}
for ( var i = 0 ; i < this . set . length ; i ++ ) {
if ( testSet ( this . set [ i ], version , this . options )) {
return true
}
}
return false
}
function testSet ( set , version , options ) {
for ( var i = 0 ; i < set . length ; i ++ ) {
if ( ! set [ i ]. test ( version )) {
return false
}
}
if ( version . prerelease . length && ! options . includePrerelease ) {
// Find the set of versions that are allowed to have prereleases
// For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
// That should allow `1.2.3-pr.2` to pass.
// However, `1.2.4-alpha.notready` should NOT be allowed,
// even though it's within the range set by the comparators.
for ( i = 0 ; i < set . length ; i ++ ) {
debug ( set [ i ]. semver )
if ( set [ i ]. semver === ANY ) {
continue
}
if ( set [ i ]. semver . prerelease . length > 0 ) {
var allowed = set [ i ]. semver
if ( allowed . major === version . major &&
allowed . minor === version . minor &&
allowed . patch === version . patch ) {
return true
}
}
}
// Version has a -pre, but it's not one of the ones we like.
return false
}
return true
}
exports . satisfies = satisfies
function satisfies ( version , range , options ) {
try {
range = new Range ( range , options )
} catch ( er ) {
return false
}
return range . test ( version )
}
exports . maxSatisfying = maxSatisfying
function maxSatisfying ( versions , range , options ) {
var max = null
var maxSV = null
try {
var rangeObj = new Range ( range , options )
} catch ( er ) {
return null
}
versions . forEach ( function ( v ) {
if ( rangeObj . test ( v )) {
// satisfies(v, range, options)
if ( ! max || maxSV . compare ( v ) === - 1 ) {
// compare(max, v, true)
max = v
maxSV = new SemVer ( max , options )
}
}
})
return max
}
exports . minSatisfying = minSatisfying
function minSatisfying ( versions , range , options ) {
var min = null
var minSV = null
try {
var rangeObj = new Range ( range , options )
} catch ( er ) {
return null
}
versions . forEach ( function ( v ) {
if ( rangeObj . test ( v )) {
// satisfies(v, range, options)
if ( ! min || minSV . compare ( v ) === 1 ) {
// compare(min, v, true)
min = v
minSV = new SemVer ( min , options )
}
}
})
return min
}
exports . minVersion = minVersion
function minVersion ( range , loose ) {
range = new Range ( range , loose )
var minver = new SemVer ( '0.0.0' )
if ( range . test ( minver )) {
return minver
}
minver = new SemVer ( '0.0.0-0' )
if ( range . test ( minver )) {
return minver
}
minver = null
for ( var i = 0 ; i < range . set . length ; ++ i ) {
var comparators = range . set [ i ]
comparators . forEach ( function ( comparator ) {
// Clone to avoid manipulating the comparator's semver object.
var compver = new SemVer ( comparator . semver . version )
switch ( comparator . operator ) {
case '>' :
if ( compver . prerelease . length === 0 ) {
compver . patch ++
} else {
compver . prerelease . push ( 0 )
}
compver . raw = compver . format ()
/* fallthrough */
case '' :
case '>=' :
if ( ! minver || gt ( minver , compver )) {
minver = compver
}
break
case '<' :
case '<=' :
/* Ignore maximum versions */
break
/* istanbul ignore next */
default :
throw new Error ( 'Unexpected operation: ' + comparator . operator )
}
})
}
if ( minver && range . test ( minver )) {
return minver
}
return null
}
exports . validRange = validRange
function validRange ( range , options ) {
try {
// Return '*' instead of '' so that truthiness works.
// This will throw if it's invalid anyway
return new Range ( range , options ). range || '*'
} catch ( er ) {
return null
}
}
// Determine if version is less than all the versions possible in the range
exports . ltr = ltr
function ltr ( version , range , options ) {
return outside ( version , range , '<' , options )
}
// Determine if version is greater than all the versions possible in the range.
exports . gtr = gtr
function gtr ( version , range , options ) {
return outside ( version , range , '>' , options )
}
exports . outside = outside
function outside ( version , range , hilo , options ) {
version = new SemVer ( version , options )
range = new Range ( range , options )
var gtfn , ltefn , ltfn , comp , ecomp
switch ( hilo ) {
case '>' :
gtfn = gt
ltefn = lte
ltfn = lt
comp = '>'
ecomp = '>='
break
case '<' :
gtfn = lt
ltefn = gte
ltfn = gt
comp = '<'
ecomp = '<='
break
default :
throw new TypeError ( 'Must provide a hilo val of "<" or ">"' )
}
// If it satisifes the range it is not outside
if ( satisfies ( version , range , options )) {
return false
}
// From now on, variable terms are as if we're in "gtr" mode.
// but note that everything is flipped for the "ltr" function.
for ( var i = 0 ; i < range . set . length ; ++ i ) {
var comparators = range . set [ i ]
var high = null
var low = null
comparators . forEach ( function ( comparator ) {
if ( comparator . semver === ANY ) {
comparator = new Comparator ( '>=0.0.0' )
}
high = high || comparator
low = low || comparator
if ( gtfn ( comparator . semver , high . semver , options )) {
high = comparator
} else if ( ltfn ( comparator . semver , low . semver , options )) {
low = comparator
}
})
// If the edge version comparator has a operator then our version
// isn't outside it
if ( high . operator === comp || high . operator === ecomp ) {
return false
}
// If the lowest version comparator has an operator and our version
// is less than it then it isn't higher than the range
if (( ! low . operator || low . operator === comp ) &&
ltefn ( version , low . semver )) {
return false
} else if ( low . operator === ecomp && ltfn ( version , low . semver )) {
return false
}
}
return true
}
exports . prerelease = prerelease
function prerelease ( version , options ) {
var parsed = parse ( version , options )
return ( parsed && parsed . prerelease . length ) ? parsed . prerelease : null
}
exports . intersects = intersects
function intersects ( r1 , r2 , options ) {
r1 = new Range ( r1 , options )
r2 = new Range ( r2 , options )
return r1 . intersects ( r2 )
}
exports . coerce = coerce
function coerce ( version ) {
if ( version instanceof SemVer ) {
return version
}
if ( typeof version !== 'string' ) {
return null
}
var match = version . match ( re [ COERCE ])
if ( match == null ) {
return null
}
return parse ( match [ 1 ] +
'.' + ( match [ 2 ] || '0' ) +
'.' + ( match [ 3 ] || '0' ))
}
/***/ }),
/***/ 289 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
var __awaiter = ( this && this . __awaiter ) || function ( thisArg , _arguments , P , generator ) {
function adopt ( value ) { return value instanceof P ? value : new P ( function ( resolve ) { resolve ( value ); }); }
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 ) : adopt ( 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 ( __webpack_require__ ( 470 ));
const exec = __importStar ( __webpack_require__ ( 986 ));
const fshelper = __importStar ( __webpack_require__ ( 618 ));
const io = __importStar ( __webpack_require__ ( 1 ));
const path = __importStar ( __webpack_require__ ( 622 ));
const git_version_1 = __webpack_require__ ( 559 );
2019-12-09 19:15:39 -05:00
// Auth header not supported before 2.9
// Wire protocol v2 not supported before 2.18
exports . MinimumGitVersion = new git_version_1 . GitVersion ( '2.18' );
2019-12-03 10:28:59 -05:00
function CreateCommandManager ( workingDirectory , lfs ) {
return __awaiter ( this , void 0 , void 0 , function * () {
return yield GitCommandManager . createCommandManager ( workingDirectory , lfs );
});
}
exports . CreateCommandManager = CreateCommandManager ;
class GitCommandManager {
// Private constructor; use createCommandManager()
constructor () {
this . gitEnv = {
GIT_TERMINAL_PROMPT : '0' ,
GCM_INTERACTIVE : 'Never' // Disable prompting for git credential manager
};
this . gitPath = '' ;
this . lfs = false ;
this . workingDirectory = '' ;
}
branchDelete ( remote , branch ) {
return __awaiter ( this , void 0 , void 0 , function * () {
const args = [ 'branch' , '--delete' , '--force' ];
if ( remote ) {
args . push ( '--remote' );
}
args . push ( branch );
yield this . execGit ( args );
});
}
branchExists ( remote , pattern ) {
return __awaiter ( this , void 0 , void 0 , function * () {
const args = [ 'branch' , '--list' ];
if ( remote ) {
args . push ( '--remote' );
}
args . push ( pattern );
const output = yield this . execGit ( args );
return !! output . stdout . trim ();
});
}
branchList ( remote ) {
return __awaiter ( this , void 0 , void 0 , function * () {
const result = [];
// Note, this implementation uses "rev-parse --symbolic" because the output from
// "branch --list" is more difficult when in a detached HEAD state.
const args = [ 'rev-parse' , '--symbolic' ];
if ( remote ) {
args . push ( '--remotes=origin' );
}
else {
args . push ( '--branches' );
}
const output = yield this . execGit ( args );
for ( let branch of output . stdout . trim (). split ( '\n' )) {
branch = branch . trim ();
if ( branch ) {
result . push ( branch );
}
}
return result ;
});
}
checkout ( ref , startPoint ) {
return __awaiter ( this , void 0 , void 0 , function * () {
const args = [ 'checkout' , '--progress' , '--force' ];
if ( startPoint ) {
args . push ( '-B' , ref , startPoint );
}
else {
args . push ( ref );
}
yield this . execGit ( args );
});
}
checkoutDetach () {
return __awaiter ( this , void 0 , void 0 , function * () {
const args = [ 'checkout' , '--detach' ];
yield this . execGit ( args );
});
}
config ( configKey , configValue ) {
return __awaiter ( this , void 0 , void 0 , function * () {
yield this . execGit ([ 'config' , configKey , configValue ]);
});
}
configExists ( configKey ) {
return __awaiter ( this , void 0 , void 0 , function * () {
const pattern = configKey . replace ( /[^a-zA-Z0-9_]/g , x => {
return `\\ ${ x } ` ;
});
const output = yield this . execGit ([ 'config' , '--name-only' , '--get-regexp' , pattern ], true );
return output . exitCode === 0 ;
});
}
fetch ( fetchDepth , refSpec ) {
return __awaiter ( this , void 0 , void 0 , function * () {
const args = [
'-c' ,
'protocol.version=2' ,
'fetch' ,
'--no-tags' ,
'--prune' ,
'--progress' ,
'--no-recurse-submodules'
];
if ( fetchDepth > 0 ) {
args . push ( `--depth= ${ fetchDepth } ` );
}
else if ( fshelper . fileExistsSync ( path . join ( this . workingDirectory , '.git' , 'shallow' ))) {
args . push ( '--unshallow' );
}
args . push ( 'origin' );
for ( const arg of refSpec ) {
args . push ( arg );
}
let attempt = 1 ;
const maxAttempts = 3 ;
while ( attempt <= maxAttempts ) {
const allowAllExitCodes = attempt < maxAttempts ;
const output = yield this . execGit ( args , allowAllExitCodes );
if ( output . exitCode === 0 ) {
break ;
}
const seconds = this . getRandomIntInclusive ( 1 , 10 );
core . warning ( `Git fetch failed with exit code ${ output . exitCode } . Waiting ${ seconds } seconds before trying again.` );
yield this . sleep ( seconds * 1000 );
attempt ++ ;
}
});
}
getWorkingDirectory () {
return this . workingDirectory ;
}
init () {
return __awaiter ( this , void 0 , void 0 , function * () {
yield this . execGit ([ 'init' , this . workingDirectory ]);
});
}
isDetached () {
return __awaiter ( this , void 0 , void 0 , function * () {
// Note, this implementation uses "branch --show-current" because
// "rev-parse --symbolic-full-name HEAD" can fail on a new repo
// with nothing checked out.
const output = yield this . execGit ([ 'branch' , '--show-current' ]);
return output . stdout . trim () === '' ;
});
}
lfsFetch ( ref ) {
return __awaiter ( this , void 0 , void 0 , function * () {
const args = [ 'lfs' , 'fetch' , 'origin' , ref ];
let attempt = 1 ;
const maxAttempts = 3 ;
while ( attempt <= maxAttempts ) {
const allowAllExitCodes = attempt < maxAttempts ;
const output = yield this . execGit ( args , allowAllExitCodes );
if ( output . exitCode === 0 ) {
break ;
}
const seconds = this . getRandomIntInclusive ( 1 , 10 );
core . warning ( `Git lfs fetch failed with exit code ${ output . exitCode } . Waiting ${ seconds } seconds before trying again.` );
yield this . sleep ( seconds * 1000 );
attempt ++ ;
}
});
}
lfsInstall () {
return __awaiter ( this , void 0 , void 0 , function * () {
yield this . execGit ([ 'lfs' , 'install' , '--local' ]);
});
}
log1 () {
return __awaiter ( this , void 0 , void 0 , function * () {
yield this . execGit ([ 'log' , '-1' ]);
});
}
remoteAdd ( remoteName , remoteUrl ) {
return __awaiter ( this , void 0 , void 0 , function * () {
yield this . execGit ([ 'remote' , 'add' , remoteName , remoteUrl ]);
});
}
tagExists ( pattern ) {
return __awaiter ( this , void 0 , void 0 , function * () {
const output = yield this . execGit ([ 'tag' , '--list' , pattern ]);
return !! output . stdout . trim ();
});
}
tryClean () {
return __awaiter ( this , void 0 , void 0 , function * () {
const output = yield this . execGit ([ 'clean' , '-ffdx' ], true );
return output . exitCode === 0 ;
});
}
tryConfigUnset ( configKey ) {
return __awaiter ( this , void 0 , void 0 , function * () {
const output = yield this . execGit ([ 'config' , '--unset-all' , configKey ], true );
return output . exitCode === 0 ;
});
}
tryDisableAutomaticGarbageCollection () {
return __awaiter ( this , void 0 , void 0 , function * () {
const output = yield this . execGit ([ 'config' , 'gc.auto' , '0' ], true );
return output . exitCode === 0 ;
});
}
tryGetFetchUrl () {
return __awaiter ( this , void 0 , void 0 , function * () {
const output = yield this . execGit ([ 'config' , '--get' , 'remote.origin.url' ], true );
if ( output . exitCode !== 0 ) {
return '' ;
}
const stdout = output . stdout . trim ();
if ( stdout . includes ( '\n' )) {
return '' ;
}
return stdout ;
});
}
tryReset () {
return __awaiter ( this , void 0 , void 0 , function * () {
const output = yield this . execGit ([ 'reset' , '--hard' , 'HEAD' ], true );
return output . exitCode === 0 ;
});
}
static createCommandManager ( workingDirectory , lfs ) {
return __awaiter ( this , void 0 , void 0 , function * () {
const result = new GitCommandManager ();
yield result . initializeCommandManager ( workingDirectory , lfs );
return result ;
});
}
execGit ( args , allowAllExitCodes = false ) {
return __awaiter ( this , void 0 , void 0 , function * () {
fshelper . directoryExistsSync ( this . workingDirectory , true );
const result = new GitOutput ();
const env = {};
for ( const key of Object . keys ( process . env )) {
env [ key ] = process . env [ key ];
}
for ( const key of Object . keys ( this . gitEnv )) {
env [ key ] = this . gitEnv [ key ];
}
const stdout = [];
const options = {
cwd : this . workingDirectory ,
env ,
ignoreReturnCode : allowAllExitCodes ,
listeners : {
stdout : ( data ) => {
stdout . push ( data . toString ());
}
}
};
result . exitCode = yield exec . exec ( `" ${ this . gitPath } "` , args , options );
result . stdout = stdout . join ( '' );
return result ;
});
}
initializeCommandManager ( workingDirectory , lfs ) {
return __awaiter ( this , void 0 , void 0 , function * () {
this . workingDirectory = workingDirectory ;
// Git-lfs will try to pull down assets if any of the local/user/system setting exist.
// If the user didn't enable `LFS` in their pipeline definition, disable LFS fetch/checkout.
this . lfs = lfs ;
if ( ! this . lfs ) {
this . gitEnv [ 'GIT_LFS_SKIP_SMUDGE' ] = '1' ;
}
this . gitPath = yield io . which ( 'git' , true );
// Git version
core . debug ( 'Getting git version' );
let gitVersion = new git_version_1 . GitVersion ();
let gitOutput = yield this . execGit ([ 'version' ]);
let stdout = gitOutput . stdout . trim ();
if ( ! stdout . includes ( '\n' )) {
const match = stdout . match ( /\d+\.\d+(\.\d+)?/ );
if ( match ) {
gitVersion = new git_version_1 . GitVersion ( match [ 0 ]);
}
}
if ( ! gitVersion . isValid ()) {
throw new Error ( 'Unable to determine git version' );
}
// Minimum git version
2019-12-09 19:15:39 -05:00
if ( ! gitVersion . checkMinimum ( exports . MinimumGitVersion )) {
throw new Error ( `Minimum required git version is ${ exports . MinimumGitVersion } . Your git (' ${ this . gitPath } ') is ${ gitVersion } ` );
2019-12-03 10:28:59 -05:00
}
if ( this . lfs ) {
// Git-lfs version
core . debug ( 'Getting git-lfs version' );
let gitLfsVersion = new git_version_1 . GitVersion ();
const gitLfsPath = yield io . which ( 'git-lfs' , true );
gitOutput = yield this . execGit ([ 'lfs' , 'version' ]);
stdout = gitOutput . stdout . trim ();
if ( ! stdout . includes ( '\n' )) {
const match = stdout . match ( /\d+\.\d+(\.\d+)?/ );
if ( match ) {
gitLfsVersion = new git_version_1 . GitVersion ( match [ 0 ]);
}
}
if ( ! gitLfsVersion . isValid ()) {
throw new Error ( 'Unable to determine git-lfs version' );
}
// Minimum git-lfs version
// Note:
// - Auth header not supported before 2.1
const minimumGitLfsVersion = new git_version_1 . GitVersion ( '2.1' );
if ( ! gitLfsVersion . checkMinimum ( minimumGitLfsVersion )) {
throw new Error ( `Minimum required git-lfs version is ${ minimumGitLfsVersion } . Your git-lfs (' ${ gitLfsPath } ') is ${ gitLfsVersion } ` );
}
}
// Set the user agent
const gitHttpUserAgent = `git/ ${ gitVersion } (github-actions-checkout)` ;
core . debug ( `Set git useragent to: ${ gitHttpUserAgent } ` );
this . gitEnv [ 'GIT_HTTP_USER_AGENT' ] = gitHttpUserAgent ;
});
}
getRandomIntInclusive ( minimum , maximum ) {
minimum = Math . floor ( minimum );
maximum = Math . floor ( maximum );
return Math . floor ( Math . random () * ( maximum - minimum + 1 )) + minimum ;
}
sleep ( milliseconds ) {
return __awaiter ( this , void 0 , void 0 , function * () {
return new Promise ( resolve => setTimeout ( resolve , milliseconds ));
});
}
}
class GitOutput {
constructor () {
this . stdout = '' ;
this . exitCode = 0 ;
}
}
/***/ }),
/***/ 293 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
var __awaiter = ( this && this . __awaiter ) || function ( thisArg , _arguments , P , generator ) {
function adopt ( value ) { return value instanceof P ? value : new P ( function ( resolve ) { resolve ( value ); }); }
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 ) : adopt ( 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 ( __webpack_require__ ( 470 ));
const coreCommand = __importStar ( __webpack_require__ ( 431 ));
const fs = __importStar ( __webpack_require__ ( 747 ));
const fsHelper = __importStar ( __webpack_require__ ( 618 ));
const gitCommandManager = __importStar ( __webpack_require__ ( 289 ));
const io = __importStar ( __webpack_require__ ( 1 ));
const path = __importStar ( __webpack_require__ ( 622 ));
const refHelper = __importStar ( __webpack_require__ ( 227 ));
2019-12-09 17:01:19 -05:00
const githubApiHelper = __importStar ( __webpack_require__ ( 464 ));
2019-12-03 10:28:59 -05:00
const authConfigKey = `http.https://github.com/.extraheader` ;
function getSource ( settings ) {
return __awaiter ( this , void 0 , void 0 , function * () {
2019-12-09 16:54:42 -05:00
// Repository URL
2019-12-03 10:28:59 -05:00
core . info ( `Syncing repository: ${ settings . repositoryOwner } / ${ settings . repositoryName } ` );
const repositoryUrl = `https://github.com/ ${ encodeURIComponent ( settings . repositoryOwner ) } / ${ encodeURIComponent ( settings . repositoryName ) } ` ;
2019-12-09 16:54:42 -05:00
// Set intra-task state for cleanup
coreCommand . issueCommand ( 'save-state' , { name : 'repositoryPath' }, settings . repositoryPath );
2019-12-03 10:28:59 -05:00
// Remove conflicting file path
if ( fsHelper . fileExistsSync ( settings . repositoryPath )) {
yield io . rmRF ( settings . repositoryPath );
}
// Create directory
let isExisting = true ;
if ( ! fsHelper . directoryExistsSync ( settings . repositoryPath )) {
isExisting = false ;
yield io . mkdirP ( settings . repositoryPath );
}
// Git command manager
core . info ( `Working directory is ' ${ settings . repositoryPath } '` );
2019-12-09 16:54:42 -05:00
let git = null ;
try {
git = yield gitCommandManager . CreateCommandManager ( settings . repositoryPath , settings . lfs );
}
catch ( err ) {
// Git is required for LFS
if ( settings . lfs ) {
throw err ;
2019-12-03 13:43:37 -05:00
}
2019-12-09 16:54:42 -05:00
// Otherwise fallback to REST API
2019-12-03 10:28:59 -05:00
}
2019-12-09 16:54:42 -05:00
// Prepare existing directory, otherwise recreate
if ( isExisting ) {
yield prepareExistingDirectory ( git , settings . repositoryPath , repositoryUrl , settings . clean );
2019-12-03 10:28:59 -05:00
}
2019-12-09 16:54:42 -05:00
if ( ! git || ` ${ 1 } ` == '1' ) {
2019-12-09 19:15:39 -05:00
core . info ( `Git version ${ gitCommandManager . MinimumGitVersion } was not found in the PATH.` );
core . info ( `Instead downloading the repository files using the GitHub REST API.` );
2019-12-09 17:01:19 -05:00
yield githubApiHelper . downloadRepository ( settings . accessToken , settings . repositoryOwner , settings . repositoryName , settings . ref , settings . repositoryPath );
2019-12-03 10:28:59 -05:00
}
2019-12-09 16:54:42 -05:00
else {
// Initialize the repository
if ( ! fsHelper . directoryExistsSync ( path . join ( settings . repositoryPath , '.git' ))) {
yield git . init ();
yield git . remoteAdd ( 'origin' , repositoryUrl );
}
// Disable automatic garbage collection
if ( ! ( yield git . tryDisableAutomaticGarbageCollection ())) {
core . warning ( `Unable to turn off git automatic garbage collection. The git fetch operation may trigger garbage collection and cause a delay.` );
}
// Remove possible previous extraheader
yield removeGitConfig ( git , authConfigKey );
// Add extraheader (auth)
const base64Credentials = Buffer . from ( `x-access-token: ${ settings . accessToken } ` , 'utf8' ). toString ( 'base64' );
core . setSecret ( base64Credentials );
const authConfigValue = `AUTHORIZATION: basic ${ base64Credentials } ` ;
yield git . config ( authConfigKey , authConfigValue );
// LFS install
if ( settings . lfs ) {
yield git . lfsInstall ();
}
// Fetch
const refSpec = refHelper . getRefSpec ( settings . ref , settings . commit );
yield git . fetch ( settings . fetchDepth , refSpec );
// Checkout info
const checkoutInfo = yield refHelper . getCheckoutInfo ( git , settings . ref , settings . commit );
// LFS fetch
// Explicit lfs-fetch to avoid slow checkout (fetches one lfs object at a time).
// Explicit lfs fetch will fetch lfs objects in parallel.
if ( settings . lfs ) {
yield git . lfsFetch ( checkoutInfo . startPoint || checkoutInfo . ref );
}
// Checkout
yield git . checkout ( checkoutInfo . ref , checkoutInfo . startPoint );
// Dump some info about the checked out commit
yield git . log1 ();
2019-12-03 10:28:59 -05:00
}
});
}
exports . getSource = getSource ;
function cleanup ( repositoryPath ) {
return __awaiter ( this , void 0 , void 0 , function * () {
// Repo exists?
if ( ! fsHelper . fileExistsSync ( path . join ( repositoryPath , '.git' , 'config' ))) {
return ;
}
fsHelper . directoryExistsSync ( repositoryPath , true );
// Remove the config key
const git = yield gitCommandManager . CreateCommandManager ( repositoryPath , false );
yield removeGitConfig ( git , authConfigKey );
});
}
exports . cleanup = cleanup ;
2019-12-09 16:54:42 -05:00
function prepareExistingDirectory ( git , repositoryPath , repositoryUrl , clean ) {
2019-12-03 10:28:59 -05:00
return __awaiter ( this , void 0 , void 0 , function * () {
2019-12-09 16:54:42 -05:00
let remove = false ;
// Check whether using git or REST API
if ( ! git ) {
remove = true ;
2019-12-03 10:28:59 -05:00
}
2019-12-09 16:54:42 -05:00
// Fetch URL does not match
else if ( ! fsHelper . directoryExistsSync ( path . join ( repositoryPath , '.git' )) ||
repositoryUrl !== ( yield git . tryGetFetchUrl ())) {
remove = true ;
}
else {
// Delete any index.lock and shallow.lock left by a previously canceled run or crashed git process
const lockPaths = [
path . join ( repositoryPath , '.git' , 'index.lock' ),
path . join ( repositoryPath , '.git' , 'shallow.lock' )
];
for ( const lockPath of lockPaths ) {
try {
yield io . rmRF ( lockPath );
}
catch ( error ) {
core . debug ( `Unable to delete ' ${ lockPath } '. ${ error . message } ` );
}
}
2019-12-03 10:28:59 -05:00
try {
2019-12-09 16:54:42 -05:00
// Checkout detached HEAD
if ( ! ( yield git . isDetached ())) {
yield git . checkoutDetach ();
}
// Remove all refs/heads/*
let branches = yield git . branchList ( false );
for ( const branch of branches ) {
yield git . branchDelete ( false , branch );
}
// Remove all refs/remotes/origin/* to avoid conflicts
branches = yield git . branchList ( true );
for ( const branch of branches ) {
yield git . branchDelete ( true , branch );
}
// Clean
if ( clean ) {
if ( ! ( yield git . tryClean ())) {
core . debug ( `The clean command failed. This might be caused by: 1) path too long, 2) permission issue, or 3) file in use. For futher investigation, manually run 'git clean -ffdx' on the directory ' ${ repositoryPath } '.` );
remove = true ;
}
else if ( ! ( yield git . tryReset ())) {
remove = true ;
}
if ( remove ) {
core . warning ( `Unable to clean or reset the repository. The repository will be recreated instead.` );
}
}
2019-12-03 10:28:59 -05:00
}
catch ( error ) {
2019-12-09 16:54:42 -05:00
core . warning ( `Unable to prepare the existing repository. The repository will be recreated instead.` );
remove = true ;
2019-12-03 10:28:59 -05:00
}
}
2019-12-09 16:54:42 -05:00
if ( remove ) {
// Delete the contents of the directory. Don't delete the directory itself
// since it might be the current working directory.
core . info ( `Deleting the contents of ' ${ repositoryPath } '` );
for ( const file of yield fs . promises . readdir ( repositoryPath )) {
yield io . rmRF ( path . join ( repositoryPath , file ));
2019-12-03 10:28:59 -05:00
}
}
});
}
function removeGitConfig ( git , configKey ) {
return __awaiter ( this , void 0 , void 0 , function * () {
if (( yield git . configExists ( configKey )) &&
! ( yield git . tryConfigUnset ( configKey ))) {
// Load the config contents
core . warning ( `Failed to remove ' ${ configKey } ' from the git config. Attempting to remove the config value by editing the file directly.` );
const configPath = path . join ( git . getWorkingDirectory (), '.git' , 'config' );
fsHelper . fileExistsSync ( configPath );
let contents = fs . readFileSync ( configPath ). toString () || '' ;
// Filter - only includes lines that do not contain the config key
const upperConfigKey = configKey . toUpperCase ();
const split = contents
. split ( '\n' )
. filter ( x => ! x . toUpperCase (). includes ( upperConfigKey ));
contents = split . join ( '\n' );
// Rewrite the config file
fs . writeFileSync ( configPath , contents );
}
});
}
/***/ }),
/***/ 294 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = parseOptions ;
const { Deprecation } = __webpack_require__ ( 692 );
2019-12-09 16:54:42 -05:00
const { getUserAgent } = __webpack_require__ ( 796 );
2019-12-03 10:28:59 -05:00
const once = __webpack_require__ ( 969 );
const pkg = __webpack_require__ ( 215 );
const deprecateOptionsTimeout = once (( log , deprecation ) =>
log . warn ( deprecation )
);
const deprecateOptionsAgent = once (( log , deprecation ) => log . warn ( deprecation ));
const deprecateOptionsHeaders = once (( log , deprecation ) =>
log . warn ( deprecation )
);
function parseOptions ( options , log , hook ) {
if ( options . headers ) {
options . headers = Object . keys ( options . headers ). reduce (( newObj , key ) => {
newObj [ key . toLowerCase ()] = options . headers [ key ];
return newObj ;
}, {});
}
const clientDefaults = {
headers : options . headers || {},
request : options . request || {},
mediaType : {
previews : [],
format : ""
}
};
if ( options . baseUrl ) {
clientDefaults . baseUrl = options . baseUrl ;
}
if ( options . userAgent ) {
clientDefaults . headers [ "user-agent" ] = options . userAgent ;
}
if ( options . previews ) {
clientDefaults . mediaType . previews = options . previews ;
}
if ( options . timeZone ) {
clientDefaults . headers [ "time-zone" ] = options . timeZone ;
}
if ( options . timeout ) {
deprecateOptionsTimeout (
log ,
new Deprecation (
"[@octokit/rest] new Octokit({timeout}) is deprecated. Use {request: {timeout}} instead. See https://github.com/octokit/request.js#request"
)
);
clientDefaults . request . timeout = options . timeout ;
}
if ( options . agent ) {
deprecateOptionsAgent (
log ,
new Deprecation (
"[@octokit/rest] new Octokit({agent}) is deprecated. Use {request: {agent}} instead. See https://github.com/octokit/request.js#request"
)
);
clientDefaults . request . agent = options . agent ;
}
if ( options . headers ) {
deprecateOptionsHeaders (
log ,
new Deprecation (
"[@octokit/rest] new Octokit({headers}) is deprecated. Use {userAgent, previews} instead. See https://github.com/octokit/request.js#request"
)
);
}
const userAgentOption = clientDefaults . headers [ "user-agent" ];
const defaultUserAgent = `octokit.js/ ${ pkg . version } ${ getUserAgent () } ` ;
clientDefaults . headers [ "user-agent" ] = [ userAgentOption , defaultUserAgent ]
. filter ( Boolean )
. join ( " " );
clientDefaults . request . hook = hook . bind ( null , "request" );
return clientDefaults ;
}
/***/ }),
/***/ 297 :
/***/ ( function ( module ) {
module . exports = class HttpError extends Error {
constructor ( message , code , headers ) {
super ( message )
// Maintains proper stack trace (only available on V8)
/* istanbul ignore next */
if ( Error . captureStackTrace ) {
Error . captureStackTrace ( this , this . constructor )
}
this . name = 'HttpError'
this . code = code
this . headers = headers
}
}
/***/ }),
/***/ 301 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
/**
* Some “list” response that can be paginated have a different response structure
*
* They have a `total_count` key in the response (search also has `incomplete_results`,
* /installation/repositories also has `repository_selection`), as well as a key with
* the list of the items which name varies from endpoint to endpoint:
*
* - https://developer.github.com/v3/search/#example (key `items`)
* - https://developer.github.com/v3/checks/runs/#response-3 (key: `check_runs`)
* - https://developer.github.com/v3/checks/suites/#response-1 (key: `check_suites`)
* - https://developer.github.com/v3/apps/installations/#list-repositories (key: `repositories`)
* - https://developer.github.com/v3/apps/installations/#list-installations-for-a-user (key `installations`)
2019-12-09 16:54:42 -05:00
* - https://developer.github.com/v3/orgs/#list-installations-for-an-organization (key `installations`)
2019-12-03 10:28:59 -05:00
*
* Octokit normalizes these responses so that paginated results are always returned following
* the same structure. One challenge is that if the list response has only one page, no Link
* header is provided, so this header alone is not sufficient to check wether a response is
* paginated or not. For the exceptions with the namespace, a fallback check for the route
* paths has to be added in order to normalize the response. We cannot check for the total_count
* property because it also exists in the response of Get the combined status for a specific ref.
*/
module . exports = normalizePaginatedListResponse ;
const { Deprecation } = __webpack_require__ ( 692 );
const once = __webpack_require__ ( 969 );
const deprecateIncompleteResults = once (( log , deprecation ) =>
log . warn ( deprecation )
);
const deprecateTotalCount = once (( log , deprecation ) => log . warn ( deprecation ));
const deprecateNamespace = once (( log , deprecation ) => log . warn ( deprecation ));
const REGEX_IS_SEARCH_PATH = /^\/search\// ;
const REGEX_IS_CHECKS_PATH = /^\/repos\/[^/]+\/[^/]+\/commits\/[^/]+\/(check-runs|check-suites)/ ;
const REGEX_IS_INSTALLATION_REPOSITORIES_PATH = /^\/installation\/repositories/ ;
const REGEX_IS_USER_INSTALLATIONS_PATH = /^\/user\/installations/ ;
2019-12-09 16:54:42 -05:00
const REGEX_IS_ORG_INSTALLATIONS_PATH = /^\/orgs\/[^/]+\/installations/ ;
2019-12-03 10:28:59 -05:00
function normalizePaginatedListResponse ( octokit , url , response ) {
const path = url . replace ( octokit . request . endpoint . DEFAULTS . baseUrl , "" );
if (
! REGEX_IS_SEARCH_PATH . test ( path ) &&
! REGEX_IS_CHECKS_PATH . test ( path ) &&
! REGEX_IS_INSTALLATION_REPOSITORIES_PATH . test ( path ) &&
2019-12-09 16:54:42 -05:00
! REGEX_IS_USER_INSTALLATIONS_PATH . test ( path ) &&
! REGEX_IS_ORG_INSTALLATIONS_PATH . test ( path )
2019-12-03 10:28:59 -05:00
) {
return ;
}
// keep the additional properties intact to avoid a breaking change,
// but log a deprecation warning when accessed
const incompleteResults = response . data . incomplete_results ;
const repositorySelection = response . data . repository_selection ;
const totalCount = response . data . total_count ;
delete response . data . incomplete_results ;
delete response . data . repository_selection ;
delete response . data . total_count ;
const namespaceKey = Object . keys ( response . data )[ 0 ];
response . data = response . data [ namespaceKey ];
Object . defineProperty ( response . data , namespaceKey , {
get () {
deprecateNamespace (
octokit . log ,
new Deprecation (
`[@octokit/rest] "result.data. ${ namespaceKey } " is deprecated. Use "result.data" instead`
)
);
return response . data ;
}
});
if ( typeof incompleteResults !== "undefined" ) {
Object . defineProperty ( response . data , "incomplete_results" , {
get () {
deprecateIncompleteResults (
octokit . log ,
new Deprecation (
'[@octokit/rest] "result.data.incomplete_results" is deprecated.'
)
);
return incompleteResults ;
}
});
}
if ( typeof repositorySelection !== "undefined" ) {
Object . defineProperty ( response . data , "repository_selection" , {
get () {
deprecateTotalCount (
octokit . log ,
new Deprecation (
'[@octokit/rest] "result.data.repository_selection" is deprecated.'
)
);
return repositorySelection ;
}
});
}
Object . defineProperty ( response . data , "total_count" , {
get () {
deprecateTotalCount (
octokit . log ,
new Deprecation (
'[@octokit/rest] "result.data.total_count" is deprecated.'
)
);
return totalCount ;
}
});
}
/***/ }),
/***/ 323 :
/***/ ( function ( module ) {
"use strict" ;
var isStream = module . exports = function ( stream ) {
return stream !== null && typeof stream === 'object' && typeof stream . pipe === 'function' ;
};
isStream . writable = function ( stream ) {
return isStream ( stream ) && stream . writable !== false && typeof stream . _write === 'function' && typeof stream . _writableState === 'object' ;
};
isStream . readable = function ( stream ) {
return isStream ( stream ) && stream . readable !== false && typeof stream . _read === 'function' && typeof stream . _readableState === 'object' ;
};
isStream . duplex = function ( stream ) {
return isStream . writable ( stream ) && isStream . readable ( stream );
};
isStream . transform = function ( stream ) {
return isStream . duplex ( stream ) && typeof stream . _transform === 'function' && typeof stream . _transformState === 'object' ;
};
/***/ }),
/***/ 336 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = hasLastPage
const deprecate = __webpack_require__ ( 370 )
const getPageLinks = __webpack_require__ ( 577 )
function hasLastPage ( link ) {
deprecate ( `octokit.hasLastPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.` )
return getPageLinks ( link ). last
}
/***/ }),
/***/ 348 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
module . exports = validate ;
const { RequestError } = __webpack_require__ ( 463 );
const get = __webpack_require__ ( 854 );
const set = __webpack_require__ ( 883 );
function validate ( octokit , options ) {
if ( ! options . request . validate ) {
return ;
}
const { validate : params } = options . request ;
Object . keys ( params ). forEach ( parameterName => {
const parameter = get ( params , parameterName );
const expectedType = parameter . type ;
let parentParameterName ;
let parentValue ;
let parentParamIsPresent = true ;
let parentParameterIsArray = false ;
if ( /\./ . test ( parameterName )) {
parentParameterName = parameterName . replace ( /\.[^.]+$/ , "" );
parentParameterIsArray = parentParameterName . slice ( - 2 ) === "[]" ;
if ( parentParameterIsArray ) {
parentParameterName = parentParameterName . slice ( 0 , - 2 );
}
parentValue = get ( options , parentParameterName );
parentParamIsPresent =
parentParameterName === "headers" ||
( typeof parentValue === "object" && parentValue !== null );
}
const values = parentParameterIsArray
? ( get ( options , parentParameterName ) || []). map (
value => value [ parameterName . split ( /\./ ). pop ()]
)
: [ get ( options , parameterName )];
values . forEach (( value , i ) => {
const valueIsPresent = typeof value !== "undefined" ;
const valueIsNull = value === null ;
const currentParameterName = parentParameterIsArray
? parameterName . replace ( /\[\]/ , `[ ${ i } ]` )
: parameterName ;
if ( ! parameter . required && ! valueIsPresent ) {
return ;
}
// if the parent parameter is of type object but allows null
// then the child parameters can be ignored
if ( ! parentParamIsPresent ) {
return ;
}
if ( parameter . allowNull && valueIsNull ) {
return ;
}
if ( ! parameter . allowNull && valueIsNull ) {
throw new RequestError (
`' ${ currentParameterName } ' cannot be null` ,
400 ,
{
request : options
}
);
}
if ( parameter . required && ! valueIsPresent ) {
throw new RequestError (
`Empty value for parameter ' ${ currentParameterName } ': ${ JSON . stringify (
value
) } ` ,
400 ,
{
request : options
}
);
}
// parse to integer before checking for enum
// so that string "1" will match enum with number 1
if ( expectedType === "integer" ) {
const unparsedValue = value ;
value = parseInt ( value , 10 );
if ( isNaN ( value )) {
throw new RequestError (
`Invalid value for parameter ' ${ currentParameterName } ': ${ JSON . stringify (
unparsedValue
) } is NaN` ,
400 ,
{
request : options
}
);
}
}
if ( parameter . enum && parameter . enum . indexOf ( String ( value )) === - 1 ) {
throw new RequestError (
`Invalid value for parameter ' ${ currentParameterName } ': ${ JSON . stringify (
value
) } ` ,
400 ,
{
request : options
}
);
}
if ( parameter . validation ) {
const regex = new RegExp ( parameter . validation );
if ( ! regex . test ( value )) {
throw new RequestError (
`Invalid value for parameter ' ${ currentParameterName } ': ${ JSON . stringify (
value
) } ` ,
400 ,
{
request : options
}
);
}
}
if ( expectedType === "object" && typeof value === "string" ) {
try {
value = JSON . parse ( value );
} catch ( exception ) {
throw new RequestError (
`JSON parse error of value for parameter ' ${ currentParameterName } ': ${ JSON . stringify (
value
) } ` ,
400 ,
{
request : options
}
);
}
}
set ( options , parameter . mapTo || currentParameterName , value );
});
});
return options ;
}
/***/ }),
/***/ 349 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = authenticationRequestError ;
const { RequestError } = __webpack_require__ ( 463 );
function authenticationRequestError ( state , error , options ) {
/* istanbul ignore next */
if ( ! error . headers ) throw error ;
const otpRequired = /required/ . test ( error . headers [ "x-github-otp" ] || "" );
// handle "2FA required" error only
if ( error . status !== 401 || ! otpRequired ) {
throw error ;
}
if (
error . status === 401 &&
otpRequired &&
error . request &&
error . request . headers [ "x-github-otp" ]
) {
throw new RequestError (
"Invalid one-time password for two-factor authentication" ,
401 ,
{
headers : error . headers ,
request : options
}
);
}
if ( typeof state . auth . on2fa !== "function" ) {
throw new RequestError (
"2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication" ,
401 ,
{
headers : error . headers ,
request : options
}
);
}
return Promise . resolve ()
. then (() => {
return state . auth . on2fa ();
})
. then ( oneTimePassword => {
const newOptions = Object . assign ( options , {
headers : Object . assign (
{ "x-github-otp" : oneTimePassword },
options . headers
)
});
return state . octokit . request ( newOptions );
});
}
/***/ }),
/***/ 357 :
/***/ ( function ( module ) {
module . exports = require ( "assert" );
/***/ }),
/***/ 363 :
/***/ ( function ( module ) {
module . exports = register
function register ( state , name , method , options ) {
if ( typeof method !== 'function' ) {
throw new Error ( 'method for before hook must be a function' )
}
if ( ! options ) {
options = {}
}
if ( Array . isArray ( name )) {
return name . reverse (). reduce ( function ( callback , name ) {
return register . bind ( null , state , name , callback , options )
}, method )()
}
return Promise . resolve ()
. then ( function () {
if ( ! state . registry [ name ]) {
return method ( options )
}
return ( state . registry [ name ]). reduce ( function ( method , registered ) {
return registered . hook . bind ( null , method , options )
}, method )()
})
}
/***/ }),
/***/ 368 :
/***/ ( function ( module ) {
module . exports = function atob ( str ) {
return Buffer . from ( str , 'base64' ). toString ( 'binary' )
}
/***/ }),
/***/ 370 :
/***/ ( function ( module ) {
module . exports = deprecate
const loggedMessages = {}
function deprecate ( message ) {
if ( loggedMessages [ message ]) {
return
}
console . warn ( `DEPRECATED (@octokit/rest): ${ message } ` )
loggedMessages [ message ] = 1
}
/***/ }),
/***/ 372 :
/***/ ( function ( module ) {
module . exports = octokitDebug ;
function octokitDebug ( octokit ) {
octokit . hook . wrap ( "request" , ( request , options ) => {
octokit . log . debug ( "request" , options );
const start = Date . now ();
const requestOptions = octokit . request . endpoint . parse ( options );
const path = requestOptions . url . replace ( options . baseUrl , "" );
return request ( options )
. then ( response => {
octokit . log . info (
` ${ requestOptions . method } ${ path } - ${
response . status
} in ${ Date . now () - start } ms`
);
return response ;
})
. catch ( error => {
octokit . log . info (
` ${ requestOptions . method } ${ path } - ${ error . status } in ${ Date . now () -
start } ms`
);
throw error ;
});
});
}
/***/ }),
/***/ 385 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
Object . defineProperty ( exports , '__esModule' , { value : true });
function _interopDefault ( ex ) { return ( ex && ( typeof ex === 'object' ) && 'default' in ex ) ? ex [ 'default' ] : ex ; }
var isPlainObject = _interopDefault ( __webpack_require__ ( 696 ));
2019-12-09 16:54:42 -05:00
var universalUserAgent = __webpack_require__ ( 796 );
2019-12-03 10:28:59 -05:00
function lowercaseKeys ( object ) {
if ( ! object ) {
return {};
}
return Object . keys ( object ). reduce (( newObj , key ) => {
newObj [ key . toLowerCase ()] = object [ key ];
return newObj ;
}, {});
}
function mergeDeep ( defaults , options ) {
const result = Object . assign ({}, defaults );
Object . keys ( options ). forEach ( key => {
if ( isPlainObject ( options [ key ])) {
if ( ! ( key in defaults )) Object . assign ( result , {
[ key ] : options [ key ]
}); else result [ key ] = mergeDeep ( defaults [ key ], options [ key ]);
} else {
Object . assign ( result , {
[ key ] : options [ key ]
});
}
});
return result ;
}
function merge ( defaults , route , options ) {
if ( typeof route === "string" ) {
let [ method , url ] = route . split ( " " );
options = Object . assign ( url ? {
method ,
url
} : {
url : method
}, options );
} else {
options = Object . assign ({}, route );
} // lowercase header names before merging with defaults to avoid duplicates
options . headers = lowercaseKeys ( options . headers );
const mergedOptions = mergeDeep ( defaults || {}, options ); // mediaType.previews arrays are merged, instead of overwritten
if ( defaults && defaults . mediaType . previews . length ) {
mergedOptions . mediaType . previews = defaults . mediaType . previews . filter ( preview => ! mergedOptions . mediaType . previews . includes ( preview )). concat ( mergedOptions . mediaType . previews );
}
mergedOptions . mediaType . previews = mergedOptions . mediaType . previews . map ( preview => preview . replace ( /-preview/ , "" ));
return mergedOptions ;
}
function addQueryParameters ( url , parameters ) {
const separator = /\?/ . test ( url ) ? "&" : "?" ;
const names = Object . keys ( parameters );
if ( names . length === 0 ) {
return url ;
}
return url + separator + names . map ( name => {
if ( name === "q" ) {
return "q=" + parameters . q . split ( "+" ). map ( encodeURIComponent ). join ( "+" );
}
return ` ${ name } = ${ encodeURIComponent ( parameters [ name ]) } ` ;
}). join ( "&" );
}
const urlVariableRegex = /\{[^}]+\}/g ;
function removeNonChars ( variableName ) {
return variableName . replace ( /^\W+|\W+$/g , "" ). split ( /,/ );
}
function extractUrlVariableNames ( url ) {
const matches = url . match ( urlVariableRegex );
if ( ! matches ) {
return [];
}
return matches . map ( removeNonChars ). reduce (( a , b ) => a . concat ( b ), []);
}
function omit ( object , keysToOmit ) {
return Object . keys ( object ). filter ( option => ! keysToOmit . includes ( option )). reduce (( obj , key ) => {
obj [ key ] = object [ key ];
return obj ;
}, {});
}
// Based on https://github.com/bramstein/url-template, licensed under BSD
// TODO: create separate package.
//
// Copyright (c) 2012-2014, Bram Stein
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// 3. The name of the author may not be used to endorse or promote products
// derived from this software without specific prior written permission.
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/* istanbul ignore file */
function encodeReserved ( str ) {
return str . split ( /(%[0-9A-Fa-f]{2})/g ). map ( function ( part ) {
if ( ! /%[0-9A-Fa-f]/ . test ( part )) {
part = encodeURI ( part ). replace ( /%5B/g , "[" ). replace ( /%5D/g , "]" );
}
return part ;
}). join ( "" );
}
function encodeUnreserved ( str ) {
return encodeURIComponent ( str ). replace ( /[!'()*]/g , function ( c ) {
return "%" + c . charCodeAt ( 0 ). toString ( 16 ). toUpperCase ();
});
}
function encodeValue ( operator , value , key ) {
value = operator === "+" || operator === "#" ? encodeReserved ( value ) : encodeUnreserved ( value );
if ( key ) {
return encodeUnreserved ( key ) + "=" + value ;
} else {
return value ;
}
}
function isDefined ( value ) {
return value !== undefined && value !== null ;
}
function isKeyOperator ( operator ) {
return operator === ";" || operator === "&" || operator === "?" ;
}
function getValues ( context , operator , key , modifier ) {
var value = context [ key ],
result = [];
if ( isDefined ( value ) && value !== "" ) {
if ( typeof value === "string" || typeof value === "number" || typeof value === "boolean" ) {
value = value . toString ();
if ( modifier && modifier !== "*" ) {
value = value . substring ( 0 , parseInt ( modifier , 10 ));
}
result . push ( encodeValue ( operator , value , isKeyOperator ( operator ) ? key : "" ));
} else {
if ( modifier === "*" ) {
if ( Array . isArray ( value )) {
value . filter ( isDefined ). forEach ( function ( value ) {
result . push ( encodeValue ( operator , value , isKeyOperator ( operator ) ? key : "" ));
});
} else {
Object . keys ( value ). forEach ( function ( k ) {
if ( isDefined ( value [ k ])) {
result . push ( encodeValue ( operator , value [ k ], k ));
}
});
}
} else {
const tmp = [];
if ( Array . isArray ( value )) {
value . filter ( isDefined ). forEach ( function ( value ) {
tmp . push ( encodeValue ( operator , value ));
});
} else {
Object . keys ( value ). forEach ( function ( k ) {
if ( isDefined ( value [ k ])) {
tmp . push ( encodeUnreserved ( k ));
tmp . push ( encodeValue ( operator , value [ k ]. toString ()));
}
});
}
if ( isKeyOperator ( operator )) {
result . push ( encodeUnreserved ( key ) + "=" + tmp . join ( "," ));
} else if ( tmp . length !== 0 ) {
result . push ( tmp . join ( "," ));
}
}
}
} else {
if ( operator === ";" ) {
if ( isDefined ( value )) {
result . push ( encodeUnreserved ( key ));
}
} else if ( value === "" && ( operator === "&" || operator === "?" )) {
result . push ( encodeUnreserved ( key ) + "=" );
} else if ( value === "" ) {
result . push ( "" );
}
}
return result ;
}
function parseUrl ( template ) {
return {
expand : expand . bind ( null , template )
};
}
function expand ( template , context ) {
var operators = [ "+" , "#" , "." , "/" , ";" , "?" , "&" ];
return template . replace ( /\{([^\{\}]+)\}|([^\{\}]+)/g , function ( _ , expression , literal ) {
if ( expression ) {
let operator = "" ;
const values = [];
if ( operators . indexOf ( expression . charAt ( 0 )) !== - 1 ) {
operator = expression . charAt ( 0 );
expression = expression . substr ( 1 );
}
expression . split ( /,/g ). forEach ( function ( variable ) {
var tmp = /([^:\*]*)(?::(\d+)|(\*))?/ . exec ( variable );
values . push ( getValues ( context , operator , tmp [ 1 ], tmp [ 2 ] || tmp [ 3 ]));
});
if ( operator && operator !== "+" ) {
var separator = "," ;
if ( operator === "?" ) {
separator = "&" ;
} else if ( operator !== "#" ) {
separator = operator ;
}
return ( values . length !== 0 ? operator : "" ) + values . join ( separator );
} else {
return values . join ( "," );
}
} else {
return encodeReserved ( literal );
}
});
}
function parse ( options ) {
// https://fetch.spec.whatwg.org/#methods
let method = options . method . toUpperCase (); // replace :varname with {varname} to make it RFC 6570 compatible
2019-12-09 16:54:42 -05:00
let url = ( options . url || "/" ). replace ( /:([a-z]\w+)/g , "{+$1}" );
2019-12-03 10:28:59 -05:00
let headers = Object . assign ({}, options . headers );
let body ;
let parameters = omit ( options , [ "method" , "baseUrl" , "url" , "headers" , "request" , "mediaType" ]); // extract variable names from URL to calculate remaining variables later
const urlVariableNames = extractUrlVariableNames ( url );
url = parseUrl ( url ). expand ( parameters );
if ( ! /^http/ . test ( url )) {
url = options . baseUrl + url ;
}
const omittedParameters = Object . keys ( options ). filter ( option => urlVariableNames . includes ( option )). concat ( "baseUrl" );
const remainingParameters = omit ( parameters , omittedParameters );
const isBinaryRequset = /application\/octet-stream/i . test ( headers . accept );
if ( ! isBinaryRequset ) {
if ( options . mediaType . format ) {
// e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw
headers . accept = headers . accept . split ( /,/ ). map ( preview => preview . replace ( /application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/ , `application/vnd$1$2. ${ options . mediaType . format } ` )). join ( "," );
}
if ( options . mediaType . previews . length ) {
const previewsFromAcceptHeader = headers . accept . match ( /[\w-]+(?=-preview)/g ) || [];
headers . accept = previewsFromAcceptHeader . concat ( options . mediaType . previews ). map ( preview => {
const format = options . mediaType . format ? `. ${ options . mediaType . format } ` : "+json" ;
return `application/vnd.github. ${ preview } -preview ${ format } ` ;
}). join ( "," );
}
} // for GET/HEAD requests, set URL query parameters from remaining parameters
// for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters
if ([ "GET" , "HEAD" ]. includes ( method )) {
url = addQueryParameters ( url , remainingParameters );
} else {
if ( "data" in remainingParameters ) {
body = remainingParameters . data ;
} else {
if ( Object . keys ( remainingParameters ). length ) {
body = remainingParameters ;
} else {
headers [ "content-length" ] = 0 ;
}
}
} // default content-type for JSON if body is set
if ( ! headers [ "content-type" ] && typeof body !== "undefined" ) {
headers [ "content-type" ] = "application/json; charset=utf-8" ;
} // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.
// fetch does not allow to set `content-length` header, but we can set body to an empty string
if ([ "PATCH" , "PUT" ]. includes ( method ) && typeof body === "undefined" ) {
body = "" ;
} // Only return body/request keys if present
return Object . assign ({
method ,
url ,
headers
}, typeof body !== "undefined" ? {
body
} : null , options . request ? {
request : options . request
} : null );
}
function endpointWithDefaults ( defaults , route , options ) {
return parse ( merge ( defaults , route , options ));
}
function withDefaults ( oldDefaults , newDefaults ) {
const DEFAULTS = merge ( oldDefaults , newDefaults );
const endpoint = endpointWithDefaults . bind ( null , DEFAULTS );
return Object . assign ( endpoint , {
DEFAULTS ,
defaults : withDefaults . bind ( null , DEFAULTS ),
merge : merge . bind ( null , DEFAULTS ),
parse
});
}
2019-12-09 16:54:42 -05:00
const VERSION = "5.5.1" ;
const userAgent = `octokit-endpoint.js/ ${ VERSION } ${ universalUserAgent . getUserAgent () } ` ; // DEFAULTS has all properties set that EndpointOptions has, except url.
// So we use RequestParameters and add method as additional required property.
2019-12-03 10:28:59 -05:00
const DEFAULTS = {
method : "GET" ,
baseUrl : "https://api.github.com" ,
headers : {
accept : "application/vnd.github.v3+json" ,
"user-agent" : userAgent
},
mediaType : {
format : "" ,
previews : []
}
};
const endpoint = withDefaults ( null , DEFAULTS );
exports . endpoint = endpoint ;
//# sourceMappingURL=index.js.map
/***/ }),
/***/ 389 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
const fs = __webpack_require__ ( 747 );
const shebangCommand = __webpack_require__ ( 866 );
function readShebang ( command ) {
// Read the first 150 bytes from the file
const size = 150 ;
let buffer ;
if ( Buffer . alloc ) {
// Node.js v4.5+ / v5.10+
buffer = Buffer . alloc ( size );
} else {
// Old Node.js API
buffer = new Buffer ( size );
buffer . fill ( 0 ); // zero-fill
}
let fd ;
try {
fd = fs . openSync ( command , 'r' );
fs . readSync ( fd , buffer , 0 , size , 0 );
fs . closeSync ( fd );
} catch ( e ) { /* Empty */ }
// Attempt to extract shebang (null is returned if not a shebang)
return shebangCommand ( buffer . toString ());
}
module . exports = readShebang ;
/***/ }),
/***/ 402 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = Octokit ;
const { request } = __webpack_require__ ( 753 );
const Hook = __webpack_require__ ( 523 );
const parseClientOptions = __webpack_require__ ( 294 );
function Octokit ( plugins , options ) {
options = options || {};
const hook = new Hook . Collection ();
const log = Object . assign (
{
debug : () => {},
info : () => {},
warn : console . warn ,
error : console . error
},
options && options . log
);
const api = {
hook ,
log ,
request : request . defaults ( parseClientOptions ( options , log , hook ))
};
plugins . forEach ( pluginFunction => pluginFunction ( api , options ));
return api ;
}
/***/ }),
/***/ 413 :
/***/ ( function ( module ) {
module . exports = require ( "stream" );
/***/ }),
/***/ 427 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
// Older verions of Node.js might not have `util.getSystemErrorName()`.
// In that case, fall back to a deprecated internal.
const util = __webpack_require__ ( 669 );
let uv ;
if ( typeof util . getSystemErrorName === 'function' ) {
module . exports = util . getSystemErrorName ;
} else {
try {
uv = process . binding ( 'uv' );
if ( typeof uv . errname !== 'function' ) {
throw new TypeError ( 'uv.errname is not a function' );
}
} catch ( err ) {
console . error ( 'execa/lib/errname: unable to establish process.binding(\'uv\')' , err );
uv = null ;
}
module . exports = code => errname ( uv , code );
}
// Used for testing the fallback behavior
module . exports . __test__ = errname ;
function errname ( uv , code ) {
if ( uv ) {
return uv . errname ( code );
}
if ( ! ( code < 0 )) {
throw new Error ( 'err >= 0' );
}
return `Unknown system error ${ code } ` ;
}
/***/ }),
/***/ 430 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = octokitValidate ;
const validate = __webpack_require__ ( 348 );
function octokitValidate ( octokit ) {
octokit . hook . before ( "request" , validate . bind ( null , octokit ));
}
/***/ }),
/***/ 431 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , { value : true });
const os = __webpack_require__ ( 87 );
/**
* Commands
*
* Command Format:
* ##[name key=value;key=value]message
*
* Examples:
* ##[warning]This is the user warning message
* ##[set-secret name=mypassword]definitelyNotAPassword!
*/
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_STRING = '::' ;
class Command {
constructor ( command , properties , message ) {
if ( ! command ) {
command = 'missing.command' ;
}
this . command = command ;
this . properties = properties ;
this . message = message ;
}
toString () {
let cmdStr = CMD_STRING + 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 += CMD_STRING ;
// 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
/***/ }),
/***/ 453 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
var once = __webpack_require__ ( 969 )
2019-12-09 16:54:42 -05:00
var eos = __webpack_require__ ( 562 )
2019-12-03 10:28:59 -05:00
var fs = __webpack_require__ ( 747 ) // we only need fs to get the ReadStream and WriteStream prototypes
var noop = function () {}
var ancient = /^v?\.0/ . test ( process . version )
var isFn = function ( fn ) {
return typeof fn === 'function'
}
var isFS = function ( stream ) {
if ( ! ancient ) return false // newer node version do not need to care about fs is a special way
if ( ! fs ) return false // browser
return ( stream instanceof ( fs . ReadStream || noop ) || stream instanceof ( fs . WriteStream || noop )) && isFn ( stream . close )
}
var isRequest = function ( stream ) {
return stream . setHeader && isFn ( stream . abort )
}
var destroyer = function ( stream , reading , writing , callback ) {
callback = once ( callback )
var closed = false
stream . on ( 'close' , function () {
closed = true
})
eos ( stream , { readable : reading , writable : writing }, function ( err ) {
if ( err ) return callback ( err )
closed = true
callback ()
})
var destroyed = false
return function ( err ) {
if ( closed ) return
if ( destroyed ) return
destroyed = true
if ( isFS ( stream )) return stream . close ( noop ) // use close for fs streams to avoid fd leaks
if ( isRequest ( stream )) return stream . abort () // request.destroy just do .end - .abort is what we want
if ( isFn ( stream . destroy )) return stream . destroy ()
callback ( err || new Error ( 'stream was destroyed' ))
}
}
var call = function ( fn ) {
fn ()
}
var pipe = function ( from , to ) {
return from . pipe ( to )
}
var pump = function () {
var streams = Array . prototype . slice . call ( arguments )
var callback = isFn ( streams [ streams . length - 1 ] || noop ) && streams . pop () || noop
if ( Array . isArray ( streams [ 0 ])) streams = streams [ 0 ]
if ( streams . length < 2 ) throw new Error ( 'pump requires two streams per minimum' )
var error
var destroys = streams . map ( function ( stream , i ) {
var reading = i < streams . length - 1
var writing = i > 0
return destroyer ( stream , reading , writing , function ( err ) {
if ( ! error ) error = err
if ( err ) destroys . forEach ( call )
if ( reading ) return
destroys . forEach ( call )
callback ( error )
})
})
return streams . reduce ( pipe )
}
module . exports = pump
/***/ }),
/***/ 454 :
/***/ ( function ( module , exports , __webpack_require__ ) {
"use strict" ;
Object . defineProperty ( exports , '__esModule' , { value : true });
function _interopDefault ( ex ) { return ( ex && ( typeof ex === 'object' ) && 'default' in ex ) ? ex [ 'default' ] : ex ; }
var Stream = _interopDefault ( __webpack_require__ ( 413 ));
var http = _interopDefault ( __webpack_require__ ( 605 ));
var Url = _interopDefault ( __webpack_require__ ( 835 ));
2019-12-09 16:54:42 -05:00
var https = _interopDefault ( __webpack_require__ ( 211 ));
2019-12-03 10:28:59 -05:00
var zlib = _interopDefault ( __webpack_require__ ( 761 ));
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
// fix for "Readable" isn't a named export issue
const Readable = Stream . Readable ;
const BUFFER = Symbol ( 'buffer' );
const TYPE = Symbol ( 'type' );
class Blob {
constructor () {
this [ TYPE ] = '' ;
const blobParts = arguments [ 0 ];
const options = arguments [ 1 ];
const buffers = [];
let size = 0 ;
if ( blobParts ) {
const a = blobParts ;
const length = Number ( a . length );
for ( let i = 0 ; i < length ; i ++ ) {
const element = a [ i ];
let buffer ;
if ( element instanceof Buffer ) {
buffer = element ;
} else if ( ArrayBuffer . isView ( element )) {
buffer = Buffer . from ( element . buffer , element . byteOffset , element . byteLength );
} else if ( element instanceof ArrayBuffer ) {
buffer = Buffer . from ( element );
} else if ( element instanceof Blob ) {
buffer = element [ BUFFER ];
} else {
buffer = Buffer . from ( typeof element === 'string' ? element : String ( element ));
}
size += buffer . length ;
buffers . push ( buffer );
}
}
this [ BUFFER ] = Buffer . concat ( buffers );
let type = options && options . type !== undefined && String ( options . type ). toLowerCase ();
if ( type && ! /[^\u0020-\u007E]/ . test ( type )) {
this [ TYPE ] = type ;
}
}
get size () {
return this [ BUFFER ]. length ;
}
get type () {
return this [ TYPE ];
}
text () {
return Promise . resolve ( this [ BUFFER ]. toString ());
}
arrayBuffer () {
const buf = this [ BUFFER ];
const ab = buf . buffer . slice ( buf . byteOffset , buf . byteOffset + buf . byteLength );
return Promise . resolve ( ab );
}
stream () {
const readable = new Readable ();
readable . _read = function () {};
readable . push ( this [ BUFFER ]);
readable . push ( null );
return readable ;
}
toString () {
return '[object Blob]' ;
}
slice () {
const size = this . size ;
const start = arguments [ 0 ];
const end = arguments [ 1 ];
let relativeStart , relativeEnd ;
if ( start === undefined ) {
relativeStart = 0 ;
} else if ( start < 0 ) {
relativeStart = Math . max ( size + start , 0 );
} else {
relativeStart = Math . min ( start , size );
}
if ( end === undefined ) {
relativeEnd = size ;
} else if ( end < 0 ) {
relativeEnd = Math . max ( size + end , 0 );
} else {
relativeEnd = Math . min ( end , size );
}
const span = Math . max ( relativeEnd - relativeStart , 0 );
const buffer = this [ BUFFER ];
const slicedBuffer = buffer . slice ( relativeStart , relativeStart + span );
const blob = new Blob ([], { type : arguments [ 2 ] });
blob [ BUFFER ] = slicedBuffer ;
return blob ;
}
}
Object . defineProperties ( Blob . prototype , {
size : { enumerable : true },
type : { enumerable : true },
slice : { enumerable : true }
});
Object . defineProperty ( Blob . prototype , Symbol . toStringTag , {
value : 'Blob' ,
writable : false ,
enumerable : false ,
configurable : true
});
/**
* fetch-error.js
*
* FetchError interface for operational errors
*/
/**
* Create FetchError instance
*
* @param String message Error message for human
* @param String type Error type for machine
* @param String systemError For Node.js system error
* @return FetchError
*/
function FetchError ( message , type , systemError ) {
Error . call ( this , message );
this . message = message ;
this . type = type ;
// when err.type is `system`, err.code contains system error code
if ( systemError ) {
this . code = this . errno = systemError . code ;
}
// hide custom error implementation details from end-users
Error . captureStackTrace ( this , this . constructor );
}
FetchError . prototype = Object . create ( Error . prototype );
FetchError . prototype . constructor = FetchError ;
FetchError . prototype . name = 'FetchError' ;
let convert ;
try {
convert = __webpack_require__ ( 18 ). convert ;
} catch ( e ) {}
const INTERNALS = Symbol ( 'Body internals' );
// fix an issue where "PassThrough" isn't a named export for node <10
const PassThrough = Stream . PassThrough ;
/**
* Body mixin
*
* Ref: https://fetch.spec.whatwg.org/#body
*
* @param Stream body Readable stream
* @param Object opts Response options
* @return Void
*/
function Body ( body ) {
var _this = this ;
var _ref = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : {},
_ref$size = _ref . size ;
let size = _ref$size === undefined ? 0 : _ref$size ;
var _ref$timeout = _ref . timeout ;
let timeout = _ref$timeout === undefined ? 0 : _ref$timeout ;
if ( body == null ) {
// body is undefined or null
body = null ;
} else if ( isURLSearchParams ( body )) {
// body is a URLSearchParams
body = Buffer . from ( body . toString ());
} else if ( isBlob ( body )) ; else if ( Buffer . isBuffer ( body )) ; else if ( Object . prototype . toString . call ( body ) === '[object ArrayBuffer]' ) {
// body is ArrayBuffer
body = Buffer . from ( body );
} else if ( ArrayBuffer . isView ( body )) {
// body is ArrayBufferView
body = Buffer . from ( body . buffer , body . byteOffset , body . byteLength );
} else if ( body instanceof Stream ) ; else {
// none of the above
// coerce to string then buffer
body = Buffer . from ( String ( body ));
}
this [ INTERNALS ] = {
body ,
disturbed : false ,
error : null
};
this . size = size ;
this . timeout = timeout ;
if ( body instanceof Stream ) {
body . on ( 'error' , function ( err ) {
const error = err . name === 'AbortError' ? err : new FetchError ( `Invalid response body while trying to fetch ${ _this . url } : ${ err . message } ` , 'system' , err );
_this [ INTERNALS ]. error = error ;
});
}
}
Body . prototype = {
get body () {
return this [ INTERNALS ]. body ;
},
get bodyUsed () {
return this [ INTERNALS ]. disturbed ;
},
/**
* Decode response as ArrayBuffer
*
* @return Promise
*/
arrayBuffer () {
return consumeBody . call ( this ). then ( function ( buf ) {
return buf . buffer . slice ( buf . byteOffset , buf . byteOffset + buf . byteLength );
});
},
/**
* Return raw response as Blob
*
* @return Promise
*/
blob () {
let ct = this . headers && this . headers . get ( 'content-type' ) || '' ;
return consumeBody . call ( this ). then ( function ( buf ) {
return Object . assign (
// Prevent copying
new Blob ([], {
type : ct . toLowerCase ()
}), {
[ BUFFER ] : buf
});
});
},
/**
* Decode response as json
*
* @return Promise
*/
json () {
var _this2 = this ;
return consumeBody . call ( this ). then ( function ( buffer ) {
try {
return JSON . parse ( buffer . toString ());
} catch ( err ) {
return Body . Promise . reject ( new FetchError ( `invalid json response body at ${ _this2 . url } reason: ${ err . message } ` , 'invalid-json' ));
}
});
},
/**
* Decode response as text
*
* @return Promise
*/
text () {
return consumeBody . call ( this ). then ( function ( buffer ) {
return buffer . toString ();
});
},
/**
* Decode response as buffer (non-spec api)
*
* @return Promise
*/
buffer () {
return consumeBody . call ( this );
},
/**
* Decode response as text, while automatically detecting the encoding and
* trying to decode to UTF-8 (non-spec api)
*
* @return Promise
*/
textConverted () {
var _this3 = this ;
return consumeBody . call ( this ). then ( function ( buffer ) {
return convertBody ( buffer , _this3 . headers );
});
}
};
// In browsers, all properties are enumerable.
Object . defineProperties ( Body . prototype , {
body : { enumerable : true },
bodyUsed : { enumerable : true },
arrayBuffer : { enumerable : true },
blob : { enumerable : true },
json : { enumerable : true },
text : { enumerable : true }
});
Body . mixIn = function ( proto ) {
for ( const name of Object . getOwnPropertyNames ( Body . prototype )) {
// istanbul ignore else: future proof
if ( ! ( name in proto )) {
const desc = Object . getOwnPropertyDescriptor ( Body . prototype , name );
Object . defineProperty ( proto , name , desc );
}
}
};
/**
* Consume and convert an entire Body to a Buffer.
*
* Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
*
* @return Promise
*/
function consumeBody () {
var _this4 = this ;
if ( this [ INTERNALS ]. disturbed ) {
return Body . Promise . reject ( new TypeError ( `body used already for: ${ this . url } ` ));
}
this [ INTERNALS ]. disturbed = true ;
if ( this [ INTERNALS ]. error ) {
return Body . Promise . reject ( this [ INTERNALS ]. error );
}
let body = this . body ;
// body is null
if ( body === null ) {
return Body . Promise . resolve ( Buffer . alloc ( 0 ));
}
// body is blob
if ( isBlob ( body )) {
body = body . stream ();
}
// body is buffer
if ( Buffer . isBuffer ( body )) {
return Body . Promise . resolve ( body );
}
// istanbul ignore if: should never happen
if ( ! ( body instanceof Stream )) {
return Body . Promise . resolve ( Buffer . alloc ( 0 ));
}
// body is stream
// get ready to actually consume the body
let accum = [];
let accumBytes = 0 ;
let abort = false ;
return new Body . Promise ( function ( resolve , reject ) {
let resTimeout ;
// allow timeout on slow response body
if ( _this4 . timeout ) {
resTimeout = setTimeout ( function () {
abort = true ;
reject ( new FetchError ( `Response timeout while trying to fetch ${ _this4 . url } (over ${ _this4 . timeout } ms)` , 'body-timeout' ));
}, _this4 . timeout );
}
// handle stream errors
body . on ( 'error' , function ( err ) {
if ( err . name === 'AbortError' ) {
// if the request was aborted, reject with this Error
abort = true ;
reject ( err );
} else {
// other errors, such as incorrect content-encoding
reject ( new FetchError ( `Invalid response body while trying to fetch ${ _this4 . url } : ${ err . message } ` , 'system' , err ));
}
});
body . on ( 'data' , function ( chunk ) {
if ( abort || chunk === null ) {
return ;
}
if ( _this4 . size && accumBytes + chunk . length > _this4 . size ) {
abort = true ;
reject ( new FetchError ( `content size at ${ _this4 . url } over limit: ${ _this4 . size } ` , 'max-size' ));
return ;
}
accumBytes += chunk . length ;
accum . push ( chunk );
});
body . on ( 'end' , function () {
if ( abort ) {
return ;
}
clearTimeout ( resTimeout );
try {
resolve ( Buffer . concat ( accum , accumBytes ));
} catch ( err ) {
// handle streams that have accumulated too much data (issue #414)
reject ( new FetchError ( `Could not create Buffer from response body for ${ _this4 . url } : ${ err . message } ` , 'system' , err ));
}
});
});
}
/**
* Detect buffer encoding and convert to target encoding
* ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
*
* @param Buffer buffer Incoming buffer
* @param String encoding Target encoding
* @return String
*/
function convertBody ( buffer , headers ) {
if ( typeof convert !== 'function' ) {
throw new Error ( 'The package `encoding` must be installed to use the textConverted() function' );
}
const ct = headers . get ( 'content-type' );
let charset = 'utf-8' ;
let res , str ;
// header
if ( ct ) {
res = /charset=([^;]*)/i . exec ( ct );
}
// no charset in content type, peek at response body for at most 1024 bytes
str = buffer . slice ( 0 , 1024 ). toString ();
// html5
if ( ! res && str ) {
res = /<meta.+?charset=(['"])(.+?)\1/i . exec ( str );
}
// html4
if ( ! res && str ) {
res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i . exec ( str );
if ( res ) {
res = /charset=(.*)/i . exec ( res . pop ());
}
}
// xml
if ( ! res && str ) {
res = /<\?xml.+?encoding=(['"])(.+?)\1/i . exec ( str );
}
// found charset
if ( res ) {
charset = res . pop ();
// prevent decode issues when sites use incorrect encoding
// ref: https://hsivonen.fi/encoding-menu/
if ( charset === 'gb2312' || charset === 'gbk' ) {
charset = 'gb18030' ;
}
}
// turn raw buffers into a single utf-8 buffer
return convert ( buffer , 'UTF-8' , charset ). toString ();
}
/**
* Detect a URLSearchParams object
* ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143
*
* @param Object obj Object to detect by type or brand
* @return String
*/
function isURLSearchParams ( obj ) {
// Duck-typing as a necessary condition.
if ( typeof obj !== 'object' || typeof obj . append !== 'function' || typeof obj . delete !== 'function' || typeof obj . get !== 'function' || typeof obj . getAll !== 'function' || typeof obj . has !== 'function' || typeof obj . set !== 'function' ) {
return false ;
}
// Brand-checking and more duck-typing as optional condition.
return obj . constructor . name === 'URLSearchParams' || Object . prototype . toString . call ( obj ) === '[object URLSearchParams]' || typeof obj . sort === 'function' ;
}
/**
* Check if `obj` is a W3C `Blob` object (which `File` inherits from)
* @param {*} obj
* @return {boolean}
*/
function isBlob ( obj ) {
return typeof obj === 'object' && typeof obj . arrayBuffer === 'function' && typeof obj . type === 'string' && typeof obj . stream === 'function' && typeof obj . constructor === 'function' && typeof obj . constructor . name === 'string' && /^(Blob|File)$/ . test ( obj . constructor . name ) && /^(Blob|File)$/ . test ( obj [ Symbol . toStringTag ]);
}
/**
* Clone body given Res/Req instance
*
* @param Mixed instance Response or Request instance
* @return Mixed
*/
function clone ( instance ) {
let p1 , p2 ;
let body = instance . body ;
// don't allow cloning a used body
if ( instance . bodyUsed ) {
throw new Error ( 'cannot clone body after it is used' );
}
// check that body is a stream and not form-data object
// note: we can't clone the form-data object without having it as a dependency
if ( body instanceof Stream && typeof body . getBoundary !== 'function' ) {
// tee instance body
p1 = new PassThrough ();
p2 = new PassThrough ();
body . pipe ( p1 );
body . pipe ( p2 );
// set instance body to teed body and return the other teed body
instance [ INTERNALS ]. body = p1 ;
body = p2 ;
}
return body ;
}
/**
* Performs the operation "extract a `Content-Type` value from |object|" as
* specified in the specification:
* https://fetch.spec.whatwg.org/#concept-bodyinit-extract
*
* This function assumes that instance.body is present.
*
* @param Mixed instance Any options.body input
*/
function extractContentType ( body ) {
if ( body === null ) {
// body is null
return null ;
} else if ( typeof body === 'string' ) {
// body is string
return 'text/plain;charset=UTF-8' ;
} else if ( isURLSearchParams ( body )) {
// body is a URLSearchParams
return 'application/x-www-form-urlencoded;charset=UTF-8' ;
} else if ( isBlob ( body )) {
// body is blob
return body . type || null ;
} else if ( Buffer . isBuffer ( body )) {
// body is buffer
return null ;
} else if ( Object . prototype . toString . call ( body ) === '[object ArrayBuffer]' ) {
// body is ArrayBuffer
return null ;
} else if ( ArrayBuffer . isView ( body )) {
// body is ArrayBufferView
return null ;
} else if ( typeof body . getBoundary === 'function' ) {
// detect form data input from form-data module
return `multipart/form-data;boundary= ${ body . getBoundary () } ` ;
} else if ( body instanceof Stream ) {
// body is stream
// can't really do much about this
return null ;
} else {
// Body constructor defaults other things to string
return 'text/plain;charset=UTF-8' ;
}
}
/**
* The Fetch Standard treats this as if "total bytes" is a property on the body.
* For us, we have to explicitly get it with a function.
*
* ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes
*
* @param Body instance Instance of Body
* @return Number? Number of bytes, or null if not possible
*/
function getTotalBytes ( instance ) {
const body = instance . body ;
if ( body === null ) {
// body is null
return 0 ;
} else if ( isBlob ( body )) {
return body . size ;
} else if ( Buffer . isBuffer ( body )) {
// body is buffer
return body . length ;
} else if ( body && typeof body . getLengthSync === 'function' ) {
// detect form data input from form-data module
if ( body . _lengthRetrievers && body . _lengthRetrievers . length == 0 || // 1.x
body . hasKnownLength && body . hasKnownLength ()) {
// 2.x
return body . getLengthSync ();
}
return null ;
} else {
// body is stream
return null ;
}
}
/**
* Write a Body to a Node.js WritableStream (e.g. http.Request) object.
*
* @param Body instance Instance of Body
* @return Void
*/
function writeToStream ( dest , instance ) {
const body = instance . body ;
if ( body === null ) {
// body is null
dest . end ();
} else if ( isBlob ( body )) {
body . stream (). pipe ( dest );
} else if ( Buffer . isBuffer ( body )) {
// body is buffer
dest . write ( body );
dest . end ();
} else {
// body is stream
body . pipe ( dest );
}
}
// expose Promise
Body . Promise = global . Promise ;
/**
* headers.js
*
* Headers class offers convenient helpers
*/
const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/ ;
const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/ ;
function validateName ( name ) {
name = ` ${ name } ` ;
if ( invalidTokenRegex . test ( name ) || name === '' ) {
throw new TypeError ( ` ${ name } is not a legal HTTP header name` );
}
}
function validateValue ( value ) {
value = ` ${ value } ` ;
if ( invalidHeaderCharRegex . test ( value )) {
throw new TypeError ( ` ${ value } is not a legal HTTP header value` );
}
}
/**
* Find the key in the map object given a header name.
*
* Returns undefined if not found.
*
* @param String name Header name
* @return String|Undefined
*/
function find ( map , name ) {
name = name . toLowerCase ();
for ( const key in map ) {
if ( key . toLowerCase () === name ) {
return key ;
}
}
return undefined ;
}
const MAP = Symbol ( 'map' );
class Headers {
/**
* Headers class
*
* @param Object headers Response headers
* @return Void
*/
constructor () {
let init = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : undefined ;
this [ MAP ] = Object . create ( null );
if ( init instanceof Headers ) {
const rawHeaders = init . raw ();
const headerNames = Object . keys ( rawHeaders );
for ( const headerName of headerNames ) {
for ( const value of rawHeaders [ headerName ]) {
this . append ( headerName , value );
}
}
return ;
}
// We don't worry about converting prop to ByteString here as append()
// will handle it.
if ( init == null ) ; else if ( typeof init === 'object' ) {
const method = init [ Symbol . iterator ];
if ( method != null ) {
if ( typeof method !== 'function' ) {
throw new TypeError ( 'Header pairs must be iterable' );
}
// sequence<sequence<ByteString>>
// Note: per spec we have to first exhaust the lists then process them
const pairs = [];
for ( const pair of init ) {
if ( typeof pair !== 'object' || typeof pair [ Symbol . iterator ] !== 'function' ) {
throw new TypeError ( 'Each header pair must be iterable' );
}
pairs . push ( Array . from ( pair ));
}
for ( const pair of pairs ) {
if ( pair . length !== 2 ) {
throw new TypeError ( 'Each header pair must be a name/value tuple' );
}
this . append ( pair [ 0 ], pair [ 1 ]);
}
} else {
// record<ByteString, ByteString>
for ( const key of Object . keys ( init )) {
const value = init [ key ];
this . append ( key , value );
}
}
} else {
throw new TypeError ( 'Provided initializer must be an object' );
}
}
/**
* Return combined header value given name
*
* @param String name Header name
* @return Mixed
*/
get ( name ) {
name = ` ${ name } ` ;
validateName ( name );
const key = find ( this [ MAP ], name );
if ( key === undefined ) {
return null ;
}
return this [ MAP ][ key ]. join ( ', ' );
}
/**
* Iterate over all headers
*
* @param Function callback Executed for each item with parameters (value, name, thisArg)
* @param Boolean thisArg `this` context for callback function
* @return Void
*/
forEach ( callback ) {
let thisArg = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : undefined ;
let pairs = getHeaders ( this );
let i = 0 ;
while ( i < pairs . length ) {
var _pairs$i = pairs [ i ];
const name = _pairs$i [ 0 ],
value = _pairs$i [ 1 ];
callback . call ( thisArg , value , name , this );
pairs = getHeaders ( this );
i ++ ;
}
}
/**
* Overwrite header values given name
*
* @param String name Header name
* @param String value Header value
* @return Void
*/
set ( name , value ) {
name = ` ${ name } ` ;
value = ` ${ value } ` ;
validateName ( name );
validateValue ( value );
const key = find ( this [ MAP ], name );
this [ MAP ][ key !== undefined ? key : name ] = [ value ];
}
/**
* Append a value onto existing header
*
* @param String name Header name
* @param String value Header value
* @return Void
*/
append ( name , value ) {
name = ` ${ name } ` ;
value = ` ${ value } ` ;
validateName ( name );
validateValue ( value );
const key = find ( this [ MAP ], name );
if ( key !== undefined ) {
this [ MAP ][ key ]. push ( value );
} else {
this [ MAP ][ name ] = [ value ];
}
}
/**
* Check for header name existence
*
* @param String name Header name
* @return Boolean
*/
has ( name ) {
name = ` ${ name } ` ;
validateName ( name );
return find ( this [ MAP ], name ) !== undefined ;
}
/**
* Delete all header values given name
*
* @param String name Header name
* @return Void
*/
delete ( name ) {
name = ` ${ name } ` ;
validateName ( name );
const key = find ( this [ MAP ], name );
if ( key !== undefined ) {
delete this [ MAP ][ key ];
}
}
/**
* Return raw headers (non-spec api)
*
* @return Object
*/
raw () {
return this [ MAP ];
}
/**
* Get an iterator on keys.
*
* @return Iterator
*/
keys () {
return createHeadersIterator ( this , 'key' );
}
/**
* Get an iterator on values.
*
* @return Iterator
*/
values () {
return createHeadersIterator ( this , 'value' );
}
/**
* Get an iterator on entries.
*
* This is the default iterator of the Headers object.
*
* @return Iterator
*/
[ Symbol . iterator ]() {
return createHeadersIterator ( this , 'key+value' );
}
}
Headers . prototype . entries = Headers . prototype [ Symbol . iterator ];
Object . defineProperty ( Headers . prototype , Symbol . toStringTag , {
value : 'Headers' ,
writable : false ,
enumerable : false ,
configurable : true
});
Object . defineProperties ( Headers . prototype , {
get : { enumerable : true },
forEach : { enumerable : true },
set : { enumerable : true },
append : { enumerable : true },
has : { enumerable : true },
delete : { enumerable : true },
keys : { enumerable : true },
values : { enumerable : true },
entries : { enumerable : true }
});
function getHeaders ( headers ) {
let kind = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : 'key+value' ;
const keys = Object . keys ( headers [ MAP ]). sort ();
return keys . map ( kind === 'key' ? function ( k ) {
return k . toLowerCase ();
} : kind === 'value' ? function ( k ) {
return headers [ MAP ][ k ]. join ( ', ' );
} : function ( k ) {
return [ k . toLowerCase (), headers [ MAP ][ k ]. join ( ', ' )];
});
}
const INTERNAL = Symbol ( 'internal' );
function createHeadersIterator ( target , kind ) {
const iterator = Object . create ( HeadersIteratorPrototype );
iterator [ INTERNAL ] = {
target ,
kind ,
index : 0
};
return iterator ;
}
const HeadersIteratorPrototype = Object . setPrototypeOf ({
next () {
// istanbul ignore if
if ( ! this || Object . getPrototypeOf ( this ) !== HeadersIteratorPrototype ) {
throw new TypeError ( 'Value of `this` is not a HeadersIterator' );
}
var _INTERNAL = this [ INTERNAL ];
const target = _INTERNAL . target ,
kind = _INTERNAL . kind ,
index = _INTERNAL . index ;
const values = getHeaders ( target , kind );
const len = values . length ;
if ( index >= len ) {
return {
value : undefined ,
done : true
};
}
this [ INTERNAL ]. index = index + 1 ;
return {
value : values [ index ],
done : false
};
}
}, Object . getPrototypeOf ( Object . getPrototypeOf ([][ Symbol . iterator ]())));
Object . defineProperty ( HeadersIteratorPrototype , Symbol . toStringTag , {
value : 'HeadersIterator' ,
writable : false ,
enumerable : false ,
configurable : true
});
/**
* Export the Headers object in a form that Node.js can consume.
*
* @param Headers headers
* @return Object
*/
function exportNodeCompatibleHeaders ( headers ) {
const obj = Object . assign ({ __proto__ : null }, headers [ MAP ]);
// http.request() only supports string as Host header. This hack makes
// specifying custom Host header possible.
const hostHeaderKey = find ( headers [ MAP ], 'Host' );
if ( hostHeaderKey !== undefined ) {
obj [ hostHeaderKey ] = obj [ hostHeaderKey ][ 0 ];
}
return obj ;
}
/**
* Create a Headers object from an object of headers, ignoring those that do
* not conform to HTTP grammar productions.
*
* @param Object obj Object of headers
* @return Headers
*/
function createHeadersLenient ( obj ) {
const headers = new Headers ();
for ( const name of Object . keys ( obj )) {
if ( invalidTokenRegex . test ( name )) {
continue ;
}
if ( Array . isArray ( obj [ name ])) {
for ( const val of obj [ name ]) {
if ( invalidHeaderCharRegex . test ( val )) {
continue ;
}
if ( headers [ MAP ][ name ] === undefined ) {
headers [ MAP ][ name ] = [ val ];
} else {
headers [ MAP ][ name ]. push ( val );
}
}
} else if ( ! invalidHeaderCharRegex . test ( obj [ name ])) {
headers [ MAP ][ name ] = [ obj [ name ]];
}
}
return headers ;
}
const INTERNALS$1 = Symbol ( 'Response internals' );
// fix an issue where "STATUS_CODES" aren't a named export for node <10
const STATUS_CODES = http . STATUS_CODES ;
/**
* Response class
*
* @param Stream body Readable stream
* @param Object opts Response options
* @return Void
*/
class Response {
constructor () {
let body = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : null ;
let opts = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : {};
Body . call ( this , body , opts );
const status = opts . status || 200 ;
const headers = new Headers ( opts . headers );
if ( body != null && ! headers . has ( 'Content-Type' )) {
const contentType = extractContentType ( body );
if ( contentType ) {
headers . append ( 'Content-Type' , contentType );
}
}
this [ INTERNALS$1 ] = {
url : opts . url ,
status ,
statusText : opts . statusText || STATUS_CODES [ status ],
headers ,
counter : opts . counter
};
}
get url () {
return this [ INTERNALS$1 ]. url || '' ;
}
get status () {
return this [ INTERNALS$1 ]. status ;
}
/**
* Convenience property representing if the request ended normally
*/
get ok () {
return this [ INTERNALS$1 ]. status >= 200 && this [ INTERNALS$1 ]. status < 300 ;
}
get redirected () {
return this [ INTERNALS$1 ]. counter > 0 ;
}
get statusText () {
return this [ INTERNALS$1 ]. statusText ;
}
get headers () {
return this [ INTERNALS$1 ]. headers ;
}
/**
* Clone this response
*
* @return Response
*/
clone () {
return new Response ( clone ( this ), {
url : this . url ,
status : this . status ,
statusText : this . statusText ,
headers : this . headers ,
ok : this . ok ,
redirected : this . redirected
});
}
}
Body . mixIn ( Response . prototype );
Object . defineProperties ( Response . prototype , {
url : { enumerable : true },
status : { enumerable : true },
ok : { enumerable : true },
redirected : { enumerable : true },
statusText : { enumerable : true },
headers : { enumerable : true },
clone : { enumerable : true }
});
Object . defineProperty ( Response . prototype , Symbol . toStringTag , {
value : 'Response' ,
writable : false ,
enumerable : false ,
configurable : true
});
const INTERNALS$2 = Symbol ( 'Request internals' );
// fix an issue where "format", "parse" aren't a named export for node <10
const parse_url = Url . parse ;
const format_url = Url . format ;
const streamDestructionSupported = 'destroy' in Stream . Readable . prototype ;
/**
* Check if a value is an instance of Request.
*
* @param Mixed input
* @return Boolean
*/
function isRequest ( input ) {
return typeof input === 'object' && typeof input [ INTERNALS$2 ] === 'object' ;
}
function isAbortSignal ( signal ) {
const proto = signal && typeof signal === 'object' && Object . getPrototypeOf ( signal );
return !! ( proto && proto . constructor . name === 'AbortSignal' );
}
/**
* Request class
*
* @param Mixed input Url or Request instance
* @param Object init Custom options
* @return Void
*/
class Request {
constructor ( input ) {
let init = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : {};
let parsedURL ;
// normalize input
if ( ! isRequest ( input )) {
if ( input && input . href ) {
// in order to support Node.js' Url objects; though WHATWG's URL objects
// will fall into this branch also (since their `toString()` will return
// `href` property anyway)
parsedURL = parse_url ( input . href );
} else {
// coerce input to a string before attempting to parse
parsedURL = parse_url ( ` ${ input } ` );
}
input = {};
} else {
parsedURL = parse_url ( input . url );
}
let method = init . method || input . method || 'GET' ;
method = method . toUpperCase ();
if (( init . body != null || isRequest ( input ) && input . body !== null ) && ( method === 'GET' || method === 'HEAD' )) {
throw new TypeError ( 'Request with GET/HEAD method cannot have body' );
}
let inputBody = init . body != null ? init . body : isRequest ( input ) && input . body !== null ? clone ( input ) : null ;
Body . call ( this , inputBody , {
timeout : init . timeout || input . timeout || 0 ,
size : init . size || input . size || 0
});
const headers = new Headers ( init . headers || input . headers || {});
if ( inputBody != null && ! headers . has ( 'Content-Type' )) {
const contentType = extractContentType ( inputBody );
if ( contentType ) {
headers . append ( 'Content-Type' , contentType );
}
}
let signal = isRequest ( input ) ? input . signal : null ;
if ( 'signal' in init ) signal = init . signal ;
if ( signal != null && ! isAbortSignal ( signal )) {
throw new TypeError ( 'Expected signal to be an instanceof AbortSignal' );
}
this [ INTERNALS$2 ] = {
method ,
redirect : init . redirect || input . redirect || 'follow' ,
headers ,
parsedURL ,
signal
};
// node-fetch-only options
this . follow = init . follow !== undefined ? init . follow : input . follow !== undefined ? input . follow : 20 ;
this . compress = init . compress !== undefined ? init . compress : input . compress !== undefined ? input . compress : true ;
this . counter = init . counter || input . counter || 0 ;
this . agent = init . agent || input . agent ;
}
get method () {
return this [ INTERNALS$2 ]. method ;
}
get url () {
return format_url ( this [ INTERNALS$2 ]. parsedURL );
}
get headers () {
return this [ INTERNALS$2 ]. headers ;
}
get redirect () {
return this [ INTERNALS$2 ]. redirect ;
}
get signal () {
return this [ INTERNALS$2 ]. signal ;
}
/**
* Clone this request
*
* @return Request
*/
clone () {
return new Request ( this );
}
}
Body . mixIn ( Request . prototype );
Object . defineProperty ( Request . prototype , Symbol . toStringTag , {
value : 'Request' ,
writable : false ,
enumerable : false ,
configurable : true
});
Object . defineProperties ( Request . prototype , {
method : { enumerable : true },
url : { enumerable : true },
headers : { enumerable : true },
redirect : { enumerable : true },
clone : { enumerable : true },
signal : { enumerable : true }
});
/**
* Convert a Request to Node.js http request options.
*
* @param Request A Request instance
* @return Object The options object to be passed to http.request
*/
function getNodeRequestOptions ( request ) {
const parsedURL = request [ INTERNALS$2 ]. parsedURL ;
const headers = new Headers ( request [ INTERNALS$2 ]. headers );
// fetch step 1.3
if ( ! headers . has ( 'Accept' )) {
headers . set ( 'Accept' , '*/*' );
}
// Basic fetch
if ( ! parsedURL . protocol || ! parsedURL . hostname ) {
throw new TypeError ( 'Only absolute URLs are supported' );
}
if ( ! /^https?:$/ . test ( parsedURL . protocol )) {
throw new TypeError ( 'Only HTTP(S) protocols are supported' );
}
if ( request . signal && request . body instanceof Stream . Readable && ! streamDestructionSupported ) {
throw new Error ( 'Cancellation of streamed requests with AbortSignal is not supported in node < 8' );
}
// HTTP-network-or-cache fetch steps 2.4-2.7
let contentLengthValue = null ;
if ( request . body == null && /^(POST|PUT)$/i . test ( request . method )) {
contentLengthValue = '0' ;
}
if ( request . body != null ) {
const totalBytes = getTotalBytes ( request );
if ( typeof totalBytes === 'number' ) {
contentLengthValue = String ( totalBytes );
}
}
if ( contentLengthValue ) {
headers . set ( 'Content-Length' , contentLengthValue );
}
// HTTP-network-or-cache fetch step 2.11
if ( ! headers . has ( 'User-Agent' )) {
headers . set ( 'User-Agent' , 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)' );
}
// HTTP-network-or-cache fetch step 2.15
if ( request . compress && ! headers . has ( 'Accept-Encoding' )) {
headers . set ( 'Accept-Encoding' , 'gzip,deflate' );
}
let agent = request . agent ;
if ( typeof agent === 'function' ) {
agent = agent ( parsedURL );
}
if ( ! headers . has ( 'Connection' ) && ! agent ) {
headers . set ( 'Connection' , 'close' );
}
// HTTP-network fetch step 4.2
// chunked encoding is handled by Node.js
return Object . assign ({}, parsedURL , {
method : request . method ,
headers : exportNodeCompatibleHeaders ( headers ),
agent
});
}
/**
* abort-error.js
*
* AbortError interface for cancelled requests
*/
/**
* Create AbortError instance
*
* @param String message Error message for human
* @return AbortError
*/
function AbortError ( message ) {
Error . call ( this , message );
this . type = 'aborted' ;
this . message = message ;
// hide custom error implementation details from end-users
Error . captureStackTrace ( this , this . constructor );
}
AbortError . prototype = Object . create ( Error . prototype );
AbortError . prototype . constructor = AbortError ;
AbortError . prototype . name = 'AbortError' ;
// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
const PassThrough$1 = Stream . PassThrough ;
const resolve_url = Url . resolve ;
/**
* Fetch function
*
* @param Mixed url Absolute url or Request instance
* @param Object opts Fetch options
* @return Promise
*/
function fetch ( url , opts ) {
// allow custom promise
if ( ! fetch . Promise ) {
throw new Error ( 'native promise missing, set fetch.Promise to your favorite alternative' );
}
Body . Promise = fetch . Promise ;
// wrap http.request into fetch
return new fetch . Promise ( function ( resolve , reject ) {
// build request object
const request = new Request ( url , opts );
const options = getNodeRequestOptions ( request );
const send = ( options . protocol === 'https:' ? https : http ). request ;
const signal = request . signal ;
let response = null ;
const abort = function abort () {
let error = new AbortError ( 'The user aborted a request.' );
reject ( error );
if ( request . body && request . body instanceof Stream . Readable ) {
request . body . destroy ( error );
}
if ( ! response || ! response . body ) return ;
response . body . emit ( 'error' , error );
};
if ( signal && signal . aborted ) {
abort ();
return ;
}
const abortAndFinalize = function abortAndFinalize () {
abort ();
finalize ();
};
// send request
const req = send ( options );
let reqTimeout ;
if ( signal ) {
signal . addEventListener ( 'abort' , abortAndFinalize );
}
function finalize () {
req . abort ();
if ( signal ) signal . removeEventListener ( 'abort' , abortAndFinalize );
clearTimeout ( reqTimeout );
}
if ( request . timeout ) {
req . once ( 'socket' , function ( socket ) {
reqTimeout = setTimeout ( function () {
reject ( new FetchError ( `network timeout at: ${ request . url } ` , 'request-timeout' ));
finalize ();
}, request . timeout );
});
}
req . on ( 'error' , function ( err ) {
reject ( new FetchError ( `request to ${ request . url } failed, reason: ${ err . message } ` , 'system' , err ));
finalize ();
});
req . on ( 'response' , function ( res ) {
clearTimeout ( reqTimeout );
const headers = createHeadersLenient ( res . headers );
// HTTP fetch step 5
if ( fetch . isRedirect ( res . statusCode )) {
// HTTP fetch step 5.2
const location = headers . get ( 'Location' );
// HTTP fetch step 5.3
const locationURL = location === null ? null : resolve_url ( request . url , location );
// HTTP fetch step 5.5
switch ( request . redirect ) {
case 'error' :
reject ( new FetchError ( `redirect mode is set to error: ${ request . url } ` , 'no-redirect' ));
finalize ();
return ;
case 'manual' :
// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
if ( locationURL !== null ) {
// handle corrupted header
try {
headers . set ( 'Location' , locationURL );
} catch ( err ) {
// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
reject ( err );
}
}
break ;
case 'follow' :
// HTTP-redirect fetch step 2
if ( locationURL === null ) {
break ;
}
// HTTP-redirect fetch step 5
if ( request . counter >= request . follow ) {
reject ( new FetchError ( `maximum redirect reached at: ${ request . url } ` , 'max-redirect' ));
finalize ();
return ;
}
// HTTP-redirect fetch step 6 (counter increment)
// Create a new Request object.
const requestOpts = {
headers : new Headers ( request . headers ),
follow : request . follow ,
counter : request . counter + 1 ,
agent : request . agent ,
compress : request . compress ,
method : request . method ,
body : request . body ,
signal : request . signal ,
timeout : request . timeout
};
// HTTP-redirect fetch step 9
if ( res . statusCode !== 303 && request . body && getTotalBytes ( request ) === null ) {
reject ( new FetchError ( 'Cannot follow redirect with body being a readable stream' , 'unsupported-redirect' ));
finalize ();
return ;
}
// HTTP-redirect fetch step 11
if ( res . statusCode === 303 || ( res . statusCode === 301 || res . statusCode === 302 ) && request . method === 'POST' ) {
requestOpts . method = 'GET' ;
requestOpts . body = undefined ;
requestOpts . headers . delete ( 'content-length' );
}
// HTTP-redirect fetch step 15
resolve ( fetch ( new Request ( locationURL , requestOpts )));
finalize ();
return ;
}
}
// prepare response
res . once ( 'end' , function () {
if ( signal ) signal . removeEventListener ( 'abort' , abortAndFinalize );
});
let body = res . pipe ( new PassThrough$1 ());
const response_options = {
url : request . url ,
status : res . statusCode ,
statusText : res . statusMessage ,
headers : headers ,
size : request . size ,
timeout : request . timeout ,
counter : request . counter
};
// HTTP-network fetch step 12.1.1.3
const codings = headers . get ( 'Content-Encoding' );
// HTTP-network fetch step 12.1.1.4: handle content codings
// in following scenarios we ignore compression support
// 1. compression support is disabled
// 2. HEAD request
// 3. no Content-Encoding header
// 4. no content response (204)
// 5. content not modified response (304)
if ( ! request . compress || request . method === 'HEAD' || codings === null || res . statusCode === 204 || res . statusCode === 304 ) {
response = new Response ( body , response_options );
resolve ( response );
return ;
}
// For Node v6+
// Be less strict when decoding compressed responses, since sometimes
// servers send slightly invalid responses that are still accepted
// by common browsers.
// Always using Z_SYNC_FLUSH is what cURL does.
const zlibOptions = {
flush : zlib . Z_SYNC_FLUSH ,
finishFlush : zlib . Z_SYNC_FLUSH
};
// for gzip
if ( codings == 'gzip' || codings == 'x-gzip' ) {
body = body . pipe ( zlib . createGunzip ( zlibOptions ));
response = new Response ( body , response_options );
resolve ( response );
return ;
}
// for deflate
if ( codings == 'deflate' || codings == 'x-deflate' ) {
// handle the infamous raw deflate response from old servers
// a hack for old IIS and Apache servers
const raw = res . pipe ( new PassThrough$1 ());
raw . once ( 'data' , function ( chunk ) {
// see http://stackoverflow.com/questions/37519828
if (( chunk [ 0 ] & 0x0F ) === 0x08 ) {
body = body . pipe ( zlib . createInflate ());
} else {
body = body . pipe ( zlib . createInflateRaw ());
}
response = new Response ( body , response_options );
resolve ( response );
});
return ;
}
// for br
if ( codings == 'br' && typeof zlib . createBrotliDecompress === 'function' ) {
body = body . pipe ( zlib . createBrotliDecompress ());
response = new Response ( body , response_options );
resolve ( response );
return ;
}
// otherwise, use response as-is
response = new Response ( body , response_options );
resolve ( response );
});
writeToStream ( req , request );
});
}
/**
* Redirect code matching
*
* @param Number code Status code
* @return Boolean
*/
fetch . isRedirect = function ( code ) {
return code === 301 || code === 302 || code === 303 || code === 307 || code === 308 ;
};
// expose Promise
fetch . Promise = global . Promise ;
module . exports = exports = fetch ;
Object . defineProperty ( exports , "__esModule" , { value : true });
exports . default = exports ;
exports . Headers = Headers ;
exports . Request = Request ;
exports . Response = Response ;
exports . FetchError = FetchError ;
/***/ }),
/***/ 462 :
/***/ ( function ( module ) {
"use strict" ;
// See http://www.robvanderwoude.com/escapechars.php
const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g ;
function escapeCommand ( arg ) {
// Escape meta chars
arg = arg . replace ( metaCharsRegExp , '^$1' );
return arg ;
}
function escapeArgument ( arg , doubleEscapeMetaChars ) {
// Convert to string
arg = ` ${ arg } ` ;
// Algorithm below is based on https://qntm.org/cmd
// Sequence of backslashes followed by a double quote:
// double up all the backslashes and escape the double quote
arg = arg . replace ( /(\\*)"/g , '$1$1\\"' );
// Sequence of backslashes followed by the end of the string
// (which will become a double quote later):
// double up all the backslashes
arg = arg . replace ( /(\\*)$/ , '$1$1' );
// All other backslashes occur literally
// Quote the whole thing:
arg = `" ${ arg } "` ;
// Escape meta chars
arg = arg . replace ( metaCharsRegExp , '^$1' );
// Double escape meta chars if necessary
if ( doubleEscapeMetaChars ) {
arg = arg . replace ( metaCharsRegExp , '^$1' );
}
return arg ;
}
module . exports . command = escapeCommand ;
module . exports . argument = escapeArgument ;
/***/ }),
/***/ 463 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
Object . defineProperty ( exports , '__esModule' , { value : true });
function _interopDefault ( ex ) { return ( ex && ( typeof ex === 'object' ) && 'default' in ex ) ? ex [ 'default' ] : ex ; }
var deprecation = __webpack_require__ ( 692 );
var once = _interopDefault ( __webpack_require__ ( 969 ));
const logOnce = once ( deprecation => console . warn ( deprecation ));
/**
* Error with extra properties to help with debugging
*/
class RequestError extends Error {
constructor ( message , statusCode , options ) {
super ( message ); // Maintains proper stack trace (only available on V8)
/* istanbul ignore next */
if ( Error . captureStackTrace ) {
Error . captureStackTrace ( this , this . constructor );
}
this . name = "HttpError" ;
this . status = statusCode ;
Object . defineProperty ( this , "code" , {
get () {
logOnce ( new deprecation . Deprecation ( "[@octokit/request-error] `error.code` is deprecated, use `error.status`." ));
return statusCode ;
}
});
2019-12-09 16:54:42 -05:00
this . headers = options . headers || {}; // redact request credentials without mutating original request options
2019-12-03 10:28:59 -05:00
const requestCopy = Object . assign ({}, options . request );
if ( options . request . headers . authorization ) {
requestCopy . headers = Object . assign ({}, options . request . headers , {
authorization : options . request . headers . authorization . replace ( / .*$/ , " [REDACTED]" )
});
}
requestCopy . url = requestCopy . url // client_id & client_secret can be passed as URL query parameters to increase rate limit
// see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications
. replace ( /\bclient_secret=\w+/g , "client_secret=[REDACTED]" ) // OAuth tokens can be passed as URL query parameters, although it is not recommended
// see https://developer.github.com/v3/#oauth2-token-sent-in-a-header
. replace ( /\baccess_token=\w+/g , "access_token=[REDACTED]" );
this . request = requestCopy ;
}
}
exports . RequestError = RequestError ;
2019-12-09 16:54:42 -05:00
//# sourceMappingURL=index.js.map
2019-12-03 10:28:59 -05:00
2019-12-09 17:01:19 -05:00
/***/ }),
/***/ 464 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
var __awaiter = ( this && this . __awaiter ) || function ( thisArg , _arguments , P , generator ) {
function adopt ( value ) { return value instanceof P ? value : new P ( function ( resolve ) { resolve ( value ); }); }
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 ) : adopt ( 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 });
2019-12-09 19:15:39 -05:00
const assert = __importStar ( __webpack_require__ ( 357 ));
const exec = __importStar ( __webpack_require__ ( 986 ));
const fs = __importStar ( __webpack_require__ ( 747 ));
2019-12-09 17:01:19 -05:00
const github = __importStar ( __webpack_require__ ( 469 ));
2019-12-09 19:15:39 -05:00
const path = __importStar ( __webpack_require__ ( 622 ));
2019-12-09 17:01:19 -05:00
const IS_WINDOWS = process . platform === 'win32' ;
function downloadRepository ( accessToken , owner , repo , ref , repositoryPath ) {
return __awaiter ( this , void 0 , void 0 , function * () {
const octokit = new github . GitHub ( accessToken );
const params = {
2019-12-09 17:06:03 -05:00
archive_format : IS_WINDOWS ? 'zipball' : 'tarballl' ,
2019-12-09 17:01:19 -05:00
owner : owner ,
repo : repo ,
ref : ref
};
2019-12-09 19:15:39 -05:00
// todo: retry
2019-12-09 17:01:19 -05:00
const response = yield octokit . repos . getArchiveLink ( params );
2019-12-09 17:06:03 -05:00
if ( response . status != 200 ) {
2019-12-09 19:15:39 -05:00
throw new Error ( `Unexpected response from GitHub API. Status: ' ${ response . status } '; Data: ' ${ response . data } '` );
2019-12-09 17:06:03 -05:00
}
2019-12-09 17:01:19 -05:00
console . log ( `status= ${ response . status } ` );
console . log ( `headers= ${ JSON . stringify ( response . headers ) } ` );
2019-12-09 17:06:03 -05:00
console . log ( `data= ${ JSON . stringify ( typeof response . data ) } ` );
2019-12-09 19:15:39 -05:00
const runnerTemp = process . env [ 'RUNNER_TEMP' ];
assert . ok ( runnerTemp , 'RUNNER_TEMP not defined' );
const archiveFile = path . join ( runnerTemp , 'checkout.tar.gz' );
yield fs . promises . writeFile ( archiveFile , response . data );
2019-12-09 19:16:06 -05:00
yield exec . exec ( `tar -xzf " ${ archiveFile } "` , [], {
cwd : repositoryPath
});
2019-12-09 17:01:19 -05:00
});
}
exports . downloadRepository = downloadRepository ;
2019-12-03 10:28:59 -05:00
/***/ }),
/***/ 469 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
var __importDefault = ( this && this . __importDefault ) || function ( mod ) {
return ( mod && mod . __esModule ) ? mod : { "default" : mod };
};
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 });
// Originally pulled from https://github.com/JasonEtco/actions-toolkit/blob/master/src/github.ts
2019-12-09 16:54:42 -05:00
const graphql_1 = __webpack_require__ ( 898 );
const rest_1 = __importDefault ( __webpack_require__ ( 0 ));
2019-12-03 10:28:59 -05:00
const Context = __importStar ( __webpack_require__ ( 262 ));
// We need this in order to extend Octokit
rest_1 . default . prototype = new rest_1 . default ();
exports . context = new Context . Context ();
class GitHub extends rest_1 . default {
constructor ( token , opts = {}) {
super ( Object . assign ( Object . assign ({}, opts ), { auth : `token ${ token } ` }));
2019-12-09 16:54:42 -05:00
this . graphql = graphql_1 . graphql . defaults ({
2019-12-03 10:28:59 -05:00
headers : { authorization : `token ${ token } ` }
});
}
}
exports . GitHub = GitHub ;
//# sourceMappingURL=github.js.map
/***/ }),
/***/ 470 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
var __awaiter = ( this && this . __awaiter ) || function ( thisArg , _arguments , P , generator ) {
function adopt ( value ) { return value instanceof P ? value : new P ( function ( resolve ) { resolve ( value ); }); }
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 ) : adopt ( result . value ). then ( fulfilled , rejected ); }
step (( generator = generator . apply ( thisArg , _arguments || [])). next ());
});
};
Object . defineProperty ( exports , "__esModule" , { value : true });
const command_1 = __webpack_require__ ( 431 );
const os = __webpack_require__ ( 87 );
const path = __webpack_require__ ( 622 );
/**
* 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 ;
/**
* Registers a secret which will get masked from logs
* @param secret value of the secret
*/
function setSecret ( secret ) {
command_1 . issueCommand ( 'add-mask' , {}, secret );
}
exports . setSecret = setSecret ;
/**
* 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 ( / /g , '_' ). 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 ;
/**
* Writes info to log with console.log.
* @param message info message
*/
function info ( message ) {
process . stdout . write ( message + os . EOL );
}
exports . info = info ;
/**
* Begin an output group.
*
* Output until the next `groupEnd` will be foldable in this group
*
* @param name The name of the output group
*/
function startGroup ( name ) {
command_1 . issue ( 'group' , name );
}
exports . startGroup = startGroup ;
/**
* End an output group.
*/
function endGroup () {
command_1 . issue ( 'endgroup' );
}
exports . endGroup = endGroup ;
/**
* Wrap an asynchronous function call in a group.
*
* Returns the same type as the function itself.
*
* @param name The name of the group
* @param fn The function to wrap in the group
*/
function group ( name , fn ) {
return __awaiter ( this , void 0 , void 0 , function * () {
startGroup ( name );
let result ;
try {
result = yield fn ();
}
finally {
endGroup ();
}
return result ;
});
}
exports . group = group ;
//# sourceMappingURL=core.js.map
/***/ }),
/***/ 471 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = authenticationBeforeRequest ;
const btoa = __webpack_require__ ( 675 );
const uniq = __webpack_require__ ( 126 );
function authenticationBeforeRequest ( state , options ) {
if ( ! state . auth . type ) {
return ;
}
if ( state . auth . type === "basic" ) {
const hash = btoa ( ` ${ state . auth . username } : ${ state . auth . password } ` );
options . headers . authorization = `Basic ${ hash } ` ;
return ;
}
if ( state . auth . type === "token" ) {
options . headers . authorization = `token ${ state . auth . token } ` ;
return ;
}
if ( state . auth . type === "app" ) {
options . headers . authorization = `Bearer ${ state . auth . token } ` ;
const acceptHeaders = options . headers . accept
. split ( "," )
. concat ( "application/vnd.github.machine-man-preview+json" );
options . headers . accept = uniq ( acceptHeaders )
. filter ( Boolean )
. join ( "," );
return ;
}
options . url += options . url . indexOf ( "?" ) === - 1 ? "?" : "&" ;
if ( state . auth . token ) {
options . url += `access_token= ${ encodeURIComponent ( state . auth . token ) } ` ;
return ;
}
const key = encodeURIComponent ( state . auth . key );
const secret = encodeURIComponent ( state . auth . secret );
options . url += `client_id= ${ key } &client_secret= ${ secret } ` ;
}
/***/ }),
/***/ 489 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
const path = __webpack_require__ ( 622 );
const which = __webpack_require__ ( 814 );
const pathKey = __webpack_require__ ( 39 )();
function resolveCommandAttempt ( parsed , withoutPathExt ) {
const cwd = process . cwd ();
const hasCustomCwd = parsed . options . cwd != null ;
// If a custom `cwd` was specified, we need to change the process cwd
// because `which` will do stat calls but does not support a custom cwd
if ( hasCustomCwd ) {
try {
process . chdir ( parsed . options . cwd );
} catch ( err ) {
/* Empty */
}
}
let resolved ;
try {
resolved = which . sync ( parsed . command , {
path : ( parsed . options . env || process . env )[ pathKey ],
pathExt : withoutPathExt ? path . delimiter : undefined ,
});
} catch ( e ) {
/* Empty */
} finally {
process . chdir ( cwd );
}
// If we successfully resolved, ensure that an absolute path is returned
// Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it
if ( resolved ) {
resolved = path . resolve ( hasCustomCwd ? parsed . options . cwd : '' , resolved );
}
return resolved ;
}
function resolveCommand ( parsed ) {
return resolveCommandAttempt ( parsed ) || resolveCommandAttempt ( parsed , true );
}
module . exports = resolveCommand ;
/***/ }),
/***/ 510 :
/***/ ( function ( module ) {
module . exports = addHook
function addHook ( state , kind , name , hook ) {
var orig = hook
if ( ! state . registry [ name ]) {
state . registry [ name ] = []
}
if ( kind === 'before' ) {
hook = function ( method , options ) {
return Promise . resolve ()
. then ( orig . bind ( null , options ))
. then ( method . bind ( null , options ))
}
}
if ( kind === 'after' ) {
hook = function ( method , options ) {
var result
return Promise . resolve ()
. then ( method . bind ( null , options ))
. then ( function ( result_ ) {
result = result_
return orig ( result , options )
})
. then ( function () {
return result
})
}
}
if ( kind === 'error' ) {
hook = function ( method , options ) {
return Promise . resolve ()
. then ( method . bind ( null , options ))
. catch ( function ( error ) {
return orig ( error , options )
})
}
}
state . registry [ name ]. push ({
hook : hook ,
orig : orig
})
}
/***/ }),
/***/ 523 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
var register = __webpack_require__ ( 363 )
var addHook = __webpack_require__ ( 510 )
var removeHook = __webpack_require__ ( 763 )
// bind with array of arguments: https://stackoverflow.com/a/21792913
var bind = Function . bind
var bindable = bind . bind ( bind )
function bindApi ( hook , state , name ) {
var removeHookRef = bindable ( removeHook , null ). apply ( null , name ? [ state , name ] : [ state ])
hook . api = { remove : removeHookRef }
hook . remove = removeHookRef
;[ 'before' , 'error' , 'after' , 'wrap' ]. forEach ( function ( kind ) {
var args = name ? [ state , kind , name ] : [ state , kind ]
hook [ kind ] = hook . api [ kind ] = bindable ( addHook , null ). apply ( null , args )
})
}
function HookSingular () {
var singularHookName = 'h'
var singularHookState = {
registry : {}
}
var singularHook = register . bind ( null , singularHookState , singularHookName )
bindApi ( singularHook , singularHookState , singularHookName )
return singularHook
}
function HookCollection () {
var state = {
registry : {}
}
var hook = register . bind ( null , state )
bindApi ( hook , state )
return hook
}
var collectionHookDeprecationMessageDisplayed = false
function Hook () {
if ( ! collectionHookDeprecationMessageDisplayed ) {
console . warn ( '[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4' )
collectionHookDeprecationMessageDisplayed = true
}
return HookCollection ()
}
Hook . Singular = HookSingular . bind ()
Hook . Collection = HookCollection . bind ()
module . exports = Hook
// expose constructors as a named property for TypeScript
module . exports . Hook = Hook
module . exports . Singular = Hook . Singular
module . exports . Collection = Hook . Collection
/***/ }),
/***/ 529 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
const factory = __webpack_require__ ( 47 );
module . exports = factory ();
/***/ }),
/***/ 536 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = hasFirstPage
const deprecate = __webpack_require__ ( 370 )
const getPageLinks = __webpack_require__ ( 577 )
function hasFirstPage ( link ) {
deprecate ( `octokit.hasFirstPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.` )
return getPageLinks ( link ). first
}
/***/ }),
/***/ 550 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = getNextPage
const getPage = __webpack_require__ ( 265 )
function getNextPage ( octokit , link , headers ) {
return getPage ( octokit , link , 'next' , headers )
}
/***/ }),
/***/ 558 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = hasPreviousPage
const deprecate = __webpack_require__ ( 370 )
const getPageLinks = __webpack_require__ ( 577 )
function hasPreviousPage ( link ) {
deprecate ( `octokit.hasPreviousPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.` )
return getPageLinks ( link ). prev
}
/***/ }),
/***/ 559 :
/***/ ( function ( __unusedmodule , exports ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , { value : true });
class GitVersion {
/**
* Used for comparing the version of git and git-lfs against the minimum required version
* @param version the version string, e.g. 1.2 or 1.2.3
*/
constructor ( version ) {
this . major = NaN ;
this . minor = NaN ;
this . patch = NaN ;
if ( version ) {
const match = version . match ( /^(\d+)\.(\d+)(\.(\d+))?$/ );
if ( match ) {
this . major = Number ( match [ 1 ]);
this . minor = Number ( match [ 2 ]);
if ( match [ 4 ]) {
this . patch = Number ( match [ 4 ]);
}
}
}
}
/**
* Compares the instance against a minimum required version
* @param minimum Minimum version
*/
checkMinimum ( minimum ) {
if ( ! minimum . isValid ()) {
throw new Error ( 'Arg minimum is not a valid version' );
}
// Major is insufficient
if ( this . major < minimum . major ) {
return false ;
}
// Major is equal
if ( this . major === minimum . major ) {
// Minor is insufficient
if ( this . minor < minimum . minor ) {
return false ;
}
// Minor is equal
if ( this . minor === minimum . minor ) {
// Patch is insufficient
if ( this . patch && this . patch < ( minimum . patch || 0 )) {
return false ;
}
}
}
return true ;
}
/**
* Indicates whether the instance was constructed from a valid version string
*/
isValid () {
return ! isNaN ( this . major );
}
/**
* Returns the version as a string, e.g. 1.2 or 1.2.3
*/
toString () {
let result = '' ;
if ( this . isValid ()) {
result = ` ${ this . major } . ${ this . minor } ` ;
if ( ! isNaN ( this . patch )) {
result += `. ${ this . patch } ` ;
}
}
return result ;
}
}
exports . GitVersion = GitVersion ;
/***/ }),
/***/ 562 :
2019-12-09 16:54:42 -05:00
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
2019-12-03 10:28:59 -05:00
2019-12-09 16:54:42 -05:00
var once = __webpack_require__ ( 969 );
2019-12-03 10:28:59 -05:00
2019-12-09 16:54:42 -05:00
var noop = function () {};
2019-12-03 10:28:59 -05:00
2019-12-09 16:54:42 -05:00
var isRequest = function ( stream ) {
return stream . setHeader && typeof stream . abort === 'function' ;
};
2019-12-03 10:28:59 -05:00
2019-12-09 16:54:42 -05:00
var isChildProcess = function ( stream ) {
return stream . stdio && Array . isArray ( stream . stdio ) && stream . stdio . length === 3
};
2019-12-03 10:28:59 -05:00
2019-12-09 16:54:42 -05:00
var eos = function ( stream , opts , callback ) {
if ( typeof opts === 'function' ) return eos ( stream , null , opts );
if ( ! opts ) opts = {};
2019-12-03 10:28:59 -05:00
2019-12-09 16:54:42 -05:00
callback = once ( callback || noop );
2019-12-03 10:28:59 -05:00
2019-12-09 16:54:42 -05:00
var ws = stream . _writableState ;
var rs = stream . _readableState ;
var readable = opts . readable || ( opts . readable !== false && stream . readable );
var writable = opts . writable || ( opts . writable !== false && stream . writable );
var cancelled = false ;
2019-12-03 10:28:59 -05:00
2019-12-09 16:54:42 -05:00
var onlegacyfinish = function () {
if ( ! stream . writable ) onfinish ();
};
var onfinish = function () {
writable = false ;
if ( ! readable ) callback . call ( stream );
};
var onend = function () {
readable = false ;
if ( ! writable ) callback . call ( stream );
};
var onexit = function ( exitCode ) {
callback . call ( stream , exitCode ? new Error ( 'exited with error code: ' + exitCode ) : null );
};
var onerror = function ( err ) {
callback . call ( stream , err );
};
var onclose = function () {
process . nextTick ( onclosenexttick );
};
var onclosenexttick = function () {
if ( cancelled ) return ;
if ( readable && ! ( rs && ( rs . ended && ! rs . destroyed ))) return callback . call ( stream , new Error ( 'premature close' ));
if ( writable && ! ( ws && ( ws . ended && ! ws . destroyed ))) return callback . call ( stream , new Error ( 'premature close' ));
};
var onrequest = function () {
stream . req . on ( 'finish' , onfinish );
};
if ( isRequest ( stream )) {
stream . on ( 'complete' , onfinish );
stream . on ( 'abort' , onclose );
if ( stream . req ) onrequest ();
else stream . on ( 'request' , onrequest );
} else if ( writable && ! ws ) { // legacy streams
stream . on ( 'end' , onlegacyfinish );
stream . on ( 'close' , onlegacyfinish );
}
if ( isChildProcess ( stream )) stream . on ( 'exit' , onexit );
stream . on ( 'end' , onend );
stream . on ( 'finish' , onfinish );
if ( opts . error !== false ) stream . on ( 'error' , onerror );
stream . on ( 'close' , onclose );
return function () {
cancelled = true ;
stream . removeListener ( 'complete' , onfinish );
stream . removeListener ( 'abort' , onclose );
stream . removeListener ( 'request' , onrequest );
if ( stream . req ) stream . req . removeListener ( 'finish' , onfinish );
stream . removeListener ( 'end' , onlegacyfinish );
stream . removeListener ( 'close' , onlegacyfinish );
stream . removeListener ( 'finish' , onfinish );
stream . removeListener ( 'exit' , onexit );
stream . removeListener ( 'end' , onend );
stream . removeListener ( 'error' , onerror );
stream . removeListener ( 'close' , onclose );
};
};
module . exports = eos ;
2019-12-03 10:28:59 -05:00
/***/ }),
/***/ 563 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = getPreviousPage
const getPage = __webpack_require__ ( 265 )
function getPreviousPage ( octokit , link , headers ) {
return getPage ( octokit , link , 'prev' , headers )
}
/***/ }),
/***/ 568 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
const path = __webpack_require__ ( 622 );
const niceTry = __webpack_require__ ( 948 );
const resolveCommand = __webpack_require__ ( 489 );
const escape = __webpack_require__ ( 462 );
const readShebang = __webpack_require__ ( 389 );
const semver = __webpack_require__ ( 280 );
const isWin = process . platform === 'win32' ;
const isExecutableRegExp = /\.(?:com|exe)$/i ;
const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i ;
// `options.shell` is supported in Node ^4.8.0, ^5.7.0 and >= 6.0.0
const supportsShellOption = niceTry (() => semver . satisfies ( process . version , '^4.8.0 || ^5.7.0 || >= 6.0.0' , true )) || false ;
function detectShebang ( parsed ) {
parsed . file = resolveCommand ( parsed );
const shebang = parsed . file && readShebang ( parsed . file );
if ( shebang ) {
parsed . args . unshift ( parsed . file );
parsed . command = shebang ;
return resolveCommand ( parsed );
}
return parsed . file ;
}
function parseNonShell ( parsed ) {
if ( ! isWin ) {
return parsed ;
}
// Detect & add support for shebangs
const commandFile = detectShebang ( parsed );
// We don't need a shell if the command filename is an executable
const needsShell = ! isExecutableRegExp . test ( commandFile );
// If a shell is required, use cmd.exe and take care of escaping everything correctly
// Note that `forceShell` is an hidden option used only in tests
if ( parsed . options . forceShell || needsShell ) {
// Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`
// The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument
// Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,
// we need to double escape them
const needsDoubleEscapeMetaChars = isCmdShimRegExp . test ( commandFile );
// Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\bar)
// This is necessary otherwise it will always fail with ENOENT in those cases
parsed . command = path . normalize ( parsed . command );
// Escape command & arguments
parsed . command = escape . command ( parsed . command );
parsed . args = parsed . args . map (( arg ) => escape . argument ( arg , needsDoubleEscapeMetaChars ));
const shellCommand = [ parsed . command ]. concat ( parsed . args ). join ( ' ' );
parsed . args = [ '/d' , '/s' , '/c' , `" ${ shellCommand } "` ];
parsed . command = process . env . comspec || 'cmd.exe' ;
parsed . options . windowsVerbatimArguments = true ; // Tell node's spawn that the arguments are already escaped
}
return parsed ;
}
function parseShell ( parsed ) {
// If node supports the shell option, there's no need to mimic its behavior
if ( supportsShellOption ) {
return parsed ;
}
// Mimic node shell option
// See https://github.com/nodejs/node/blob/b9f6a2dc059a1062776133f3d4fd848c4da7d150/lib/child_process.js#L335
const shellCommand = [ parsed . command ]. concat ( parsed . args ). join ( ' ' );
if ( isWin ) {
parsed . command = typeof parsed . options . shell === 'string' ? parsed . options . shell : process . env . comspec || 'cmd.exe' ;
parsed . args = [ '/d' , '/s' , '/c' , `" ${ shellCommand } "` ];
parsed . options . windowsVerbatimArguments = true ; // Tell node's spawn that the arguments are already escaped
} else {
if ( typeof parsed . options . shell === 'string' ) {
parsed . command = parsed . options . shell ;
} else if ( process . platform === 'android' ) {
parsed . command = '/system/bin/sh' ;
} else {
parsed . command = '/bin/sh' ;
}
parsed . args = [ '-c' , shellCommand ];
}
return parsed ;
}
function parse ( command , args , options ) {
// Normalize arguments, similar to nodejs
if ( args && ! Array . isArray ( args )) {
options = args ;
args = null ;
}
args = args ? args . slice ( 0 ) : []; // Clone array to avoid changing the original
options = Object . assign ({}, options ); // Clone object to avoid changing the original
// Build our parsed object
const parsed = {
command ,
args ,
options ,
file : undefined ,
original : {
command ,
args ,
},
};
// Delegate further parsing to shell or non-shell
return options . shell ? parseShell ( parsed ) : parseNonShell ( parsed );
}
module . exports = parse ;
/***/ }),
/***/ 577 :
/***/ ( function ( module ) {
module . exports = getPageLinks
function getPageLinks ( link ) {
link = link . link || link . headers . link || ''
const links = {}
// link format:
// '<https://api.github.com/users/aseemk/followers?page=2>; rel="next", <https://api.github.com/users/aseemk/followers?page=2>; rel="last"'
link . replace ( /<([^>]*)>;\s*rel="([\w]*)"/g , ( m , uri , type ) => {
links [ type ] = uri
})
return links
}
/***/ }),
/***/ 586 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = octokitRestApiEndpoints ;
const ROUTES = __webpack_require__ ( 705 );
function octokitRestApiEndpoints ( octokit ) {
// Aliasing scopes for backward compatibility
// See https://github.com/octokit/rest.js/pull/1134
ROUTES . gitdata = ROUTES . git ;
ROUTES . authorization = ROUTES . oauthAuthorizations ;
ROUTES . pullRequests = ROUTES . pulls ;
octokit . registerEndpoints ( ROUTES );
}
/***/ }),
/***/ 605 :
/***/ ( function ( module ) {
module . exports = require ( "http" );
/***/ }),
/***/ 614 :
/***/ ( function ( module ) {
module . exports = require ( "events" );
/***/ }),
/***/ 618 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
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 fs = __importStar ( __webpack_require__ ( 747 ));
function directoryExistsSync ( path , required ) {
if ( ! path ) {
throw new Error ( "Arg 'path' must not be empty" );
}
let stats ;
try {
stats = fs . statSync ( path );
}
catch ( error ) {
if ( error . code === 'ENOENT' ) {
if ( ! required ) {
return false ;
}
throw new Error ( `Directory ' ${ path } ' does not exist` );
}
throw new Error ( `Encountered an error when checking whether path ' ${ path } ' exists: ${ error . message } ` );
}
if ( stats . isDirectory ()) {
return true ;
}
else if ( ! required ) {
return false ;
}
throw new Error ( `Directory ' ${ path } ' does not exist` );
}
exports . directoryExistsSync = directoryExistsSync ;
function existsSync ( path ) {
if ( ! path ) {
throw new Error ( "Arg 'path' must not be empty" );
}
try {
fs . statSync ( path );
}
catch ( error ) {
if ( error . code === 'ENOENT' ) {
return false ;
}
throw new Error ( `Encountered an error when checking whether path ' ${ path } ' exists: ${ error . message } ` );
}
return true ;
}
exports . existsSync = existsSync ;
function fileExistsSync ( path ) {
if ( ! path ) {
throw new Error ( "Arg 'path' must not be empty" );
}
let stats ;
try {
stats = fs . statSync ( path );
}
catch ( error ) {
if ( error . code === 'ENOENT' ) {
return false ;
}
throw new Error ( `Encountered an error when checking whether path ' ${ path } ' exists: ${ error . message } ` );
}
if ( ! stats . isDirectory ()) {
return true ;
}
return false ;
}
exports . fileExistsSync = fileExistsSync ;
/***/ }),
/***/ 621 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
const path = __webpack_require__ ( 622 );
const pathKey = __webpack_require__ ( 39 );
module . exports = opts => {
opts = Object . assign ({
cwd : process . cwd (),
path : process . env [ pathKey ()]
}, opts );
let prev ;
let pth = path . resolve ( opts . cwd );
const ret = [];
while ( prev !== pth ) {
ret . push ( path . join ( pth , 'node_modules/.bin' ));
prev = pth ;
pth = path . resolve ( pth , '..' );
}
// ensure the running `node` binary is used
ret . push ( path . dirname ( process . execPath ));
return ret . concat ( opts . path ). join ( path . delimiter );
};
module . exports . env = opts => {
opts = Object . assign ({
env : process . env
}, opts );
const env = Object . assign ({}, opts . env );
const path = pathKey ({ env });
opts . path = env [ path ];
env [ path ] = module . exports ( opts );
return env ;
};
/***/ }),
/***/ 622 :
/***/ ( function ( module ) {
module . exports = require ( "path" );
/***/ }),
/***/ 649 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = getLastPage
const getPage = __webpack_require__ ( 265 )
function getLastPage ( octokit , link , headers ) {
return getPage ( octokit , link , 'last' , headers )
}
/***/ }),
/***/ 654 :
/***/ ( function ( module ) {
// This is not the set of all possible signals.
//
// It IS, however, the set of all signals that trigger
// an exit on either Linux or BSD systems. Linux is a
// superset of the signal names supported on BSD, and
// the unknown signals just fail to register, so we can
// catch that easily enough.
//
// Don't bother with SIGKILL. It's uncatchable, which
// means that we can't fire any callbacks anyway.
//
// If a user does happen to register a handler on a non-
// fatal signal like SIGWINCH or something, and then
// exit, it'll end up firing `process.emit('exit')`, so
// the handler will be fired anyway.
//
// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
// artificially, inherently leave the process in a
// state from which it is not safe to try and enter JS
// listeners.
module . exports = [
'SIGABRT' ,
'SIGALRM' ,
'SIGHUP' ,
'SIGINT' ,
'SIGTERM'
]
if ( process . platform !== 'win32' ) {
module . exports . push (
'SIGVTALRM' ,
'SIGXCPU' ,
'SIGXFSZ' ,
'SIGUSR2' ,
'SIGTRAP' ,
'SIGSYS' ,
'SIGQUIT' ,
'SIGIOT'
// should detect profiler and enable/disable accordingly.
// see #21
// 'SIGPROF'
)
}
if ( process . platform === 'linux' ) {
module . exports . push (
'SIGIO' ,
'SIGPOLL' ,
'SIGPWR' ,
'SIGSTKFLT' ,
'SIGUNUSED'
)
}
/***/ }),
/***/ 669 :
/***/ ( function ( module ) {
module . exports = require ( "util" );
/***/ }),
/***/ 672 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
var __awaiter = ( this && this . __awaiter ) || function ( thisArg , _arguments , P , generator ) {
function adopt ( value ) { return value instanceof P ? value : new P ( function ( resolve ) { resolve ( value ); }); }
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 ) : adopt ( result . value ). then ( fulfilled , rejected ); }
step (( generator = generator . apply ( thisArg , _arguments || [])). next ());
});
};
var _a ;
Object . defineProperty ( exports , "__esModule" , { value : true });
const assert_1 = __webpack_require__ ( 357 );
const fs = __webpack_require__ ( 747 );
const path = __webpack_require__ ( 622 );
_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
/***/ }),
/***/ 674 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = authenticate ;
const { Deprecation } = __webpack_require__ ( 692 );
const once = __webpack_require__ ( 969 );
const deprecateAuthenticate = once (( log , deprecation ) => log . warn ( deprecation ));
function authenticate ( state , options ) {
deprecateAuthenticate (
state . octokit . log ,
new Deprecation (
'[@octokit/rest] octokit.authenticate() is deprecated. Use "auth" constructor option instead.'
)
);
if ( ! options ) {
state . auth = false ;
return ;
}
switch ( options . type ) {
case "basic" :
if ( ! options . username || ! options . password ) {
throw new Error (
"Basic authentication requires both a username and password to be set"
);
}
break ;
case "oauth" :
if ( ! options . token && ! ( options . key && options . secret )) {
throw new Error (
"OAuth2 authentication requires a token or key & secret to be set"
);
}
break ;
case "token" :
case "app" :
if ( ! options . token ) {
throw new Error ( "Token authentication requires a token to be set" );
}
break ;
default :
throw new Error (
"Invalid authentication type, must be 'basic', 'oauth', 'token' or 'app'"
);
}
state . auth = options ;
}
/***/ }),
/***/ 675 :
/***/ ( function ( module ) {
module . exports = function btoa ( str ) {
return new Buffer ( str ). toString ( 'base64' )
}
/***/ }),
/***/ 692 :
/***/ ( function ( __unusedmodule , exports ) {
"use strict" ;
Object . defineProperty ( exports , '__esModule' , { value : true });
class Deprecation extends Error {
constructor ( message ) {
super ( message ); // Maintains proper stack trace (only available on V8)
/* istanbul ignore next */
if ( Error . captureStackTrace ) {
Error . captureStackTrace ( this , this . constructor );
}
this . name = 'Deprecation' ;
}
}
exports . Deprecation = Deprecation ;
/***/ }),
/***/ 696 :
/***/ ( function ( module ) {
"use strict" ;
/*!
* isobject <https://github.com/jonschlinkert/isobject>
*
* Copyright (c) 2014-2017, Jon Schlinkert.
* Released under the MIT License.
*/
function isObject ( val ) {
return val != null && typeof val === 'object' && Array . isArray ( val ) === false ;
}
/*!
* is-plain-object <https://github.com/jonschlinkert/is-plain-object>
*
* Copyright (c) 2014-2017, Jon Schlinkert.
* Released under the MIT License.
*/
function isObjectObject ( o ) {
return isObject ( o ) === true
&& Object . prototype . toString . call ( o ) === '[object Object]' ;
}
function isPlainObject ( o ) {
var ctor , prot ;
if ( isObjectObject ( o ) === false ) return false ;
// If has modified constructor
ctor = o . constructor ;
if ( typeof ctor !== 'function' ) return false ;
// If has modified prototype
prot = ctor . prototype ;
if ( isObjectObject ( prot ) === false ) return false ;
// If constructor does not have an Object-specific method
if ( prot . hasOwnProperty ( 'isPrototypeOf' ) === false ) {
return false ;
}
// Most likely a plain Object
return true ;
}
module . exports = isPlainObject ;
/***/ }),
/***/ 697 :
/***/ ( function ( module ) {
"use strict" ;
module . exports = ( promise , onFinally ) => {
onFinally = onFinally || (() => {});
return promise . then (
val => new Promise ( resolve => {
resolve ( onFinally ());
}). then (() => val ),
err => new Promise ( resolve => {
resolve ( onFinally ());
}). then (() => {
throw err ;
})
);
};
/***/ }),
/***/ 705 :
/***/ ( function ( module ) {
2019-12-09 16:54:42 -05:00
module . exports = { "activity" : { "checkStarringRepo" : { "method" : "GET" , "params" : { "owner" : { "required" : true , "type" : "string" }, "repo" : { "required" : true , "type" : "string" }}, "url" : "/user/starred/:owner/:repo" }, "deleteRepoSubscription" : { "method" : "DELETE" , "params" : { "owner" : { "required" : true , "type" : "string" }, "repo" : { "required" : true , "type" : "string" }}, "url" : "/repos/:owner/:repo/subscription" }, "deleteThreadSubscription" : { "method" : "DELETE" , "params" : { "thread_id" : { "required" : true , "type" : "integer" }}, "url" : "/notifications/threads/:thread_id/subscription" }, "getRepoSubscription" : { "method" : "GET" , "params" : { "owner" : { "required" : true , "type" : "string" }, "repo" : { "required" : true , "type" : "string" }}, "url" : "/repos/:owner/:repo/subscription" }, "getThread" : { "method" : "GET" , "params" : { "thread_id" : { "required" : true , "type" : "integer" }}, "url" : "/notifications/threads/:thread_id" }, "getThreadSubscription" : { "method" : "GET" , "params" : { "thread_id" : { "required" : true , "type" : "integer" }}, "url" : "/notifications/threads/:thread_id/subscription" }, "listEventsForOrg" : { "method" : "GET" , "params" : { "org" : { "required" : true , "type" : "string" }, "page" : { "type" : "integer" }, "per_page" : { "type" : "integer" }, "username" : { "required" : true , "type" : "string" }}, "url" : "/users/:username/events/orgs/:org" }, "listEventsForUser" : { "method" : "GET" , "params" : { "page" : { "type" : "integer" }, "per_page" : { "type" : "integer" }, "username" : { "required" : true , "type" : "string" }}, "url" : "/users/:username/events" }, "listFeeds" : { "method" : "GET" , "params" : {}, "url" : "/feeds" }, "listNotifications" : { "method" : "GET" , "params" : { "all" : { "type" : "boolean" }, "before" : { "type" : "string" }, "page" : { "type" : "integer" }, "participating" : { "type" : "boolean" }, "per_page" : { "type" : "integer" }, "since" : { "type" : "string" }}, "url" : "/notifications" }, "listNotificationsForRepo" : { "method" : "GET" , "params" : { "all" : { "type" : "boolean" }, "before" : { "type" : "string" }, "owner" : { "required" : true , "type" : "string" }, "page" : { "type" : "integer" }, "participating" : { "type" : "boolean" }, "per_page" : { "type" : "integer" }, "repo" : { "required" : true , "type" : "string" }, "since" : { "type" : "string" }}, "url" : "/repos/:owner/:repo/notifications" }, "listPublicEvents" : { "method" : "GET" , "params" : { "page" : { "type" : "integer" }, "per_page" : { "type" : "integer" }}, "url" : "/events" }, "listPublicEventsForOrg" : { "method" : "GET" , "params" : { "org" : { "required" : true , "type" : "string" }, "page" : { "type" : "integer" }, "per_page" : { "type" : "integer" }}, "url" : "/orgs/:org/events" }, "listPublicEventsForRepoNetwork" : { "method" : "GET" , "params" : { "owner" : { "required" : true , "type" : "string" }, "page" : { "type" : "integer" }, "per_page" : { "type" : "integer" }, "repo" : { "required" : true , "type" : "string" }}, "url" : "/networks/:owner/:repo/events" }, "listPublicEventsForUser" : { "method" : "GET" , "params" : { "page" : { "type" : "integer" }, "per_page" : { "type" : "integer" }, "username" : { "required" : true , "type" : "string" }}, "url" : "/users/:username/events/public" }, "listReceivedEventsForUser" : { "method" : "GET" , "params" : { "page" : { "type" : "integer" }, "per_page" : { "type" : "integer" }, "username" : { "required" : true , "type" : "string" }}, "url" : "/users/:username/received_events" }, "listReceivedPublicEventsForUser" : { "method" : "GET" , "params" : { "page" : { "type" : "integer" }, "per_page" : { "type" : "integer" }, "username" : { "required" : true , "type" : "string" }}, "url" : "/users/:username/received_events/public" }, "listRepoEvents" : { "method" : "GET" , "params" : { "owner" : { "required" : true , "type" : "string" }, "page" : { "type" : "integer" }, "per_page" : { "type" : "integer" }, "repo" : { "required" : true , "type" : "string" }}, "url" : "/repos/:owner/:repo/events" }, "listReposStarredByAuthenticatedUser" : { "method" : "GET" , "params" : { "direction" : { "enum" : [ "asc" , "desc" ], "type" : "string" }, "page" : { "type" : "integer" }, "per_page" : { "type" : "integer" }, "sort" : { "enum" : [ "created" , "updated" ], "type" : "string" }}, "url" : "/user/starred" }, "listReposStarredByUser" : { "method" : "GET" , "params" : { "direction" : { "enum" : [ "asc" , "desc" ], "type" : "string" }, "page" : { "type" : "integer" }, "per_page" : { "type" : "integer" }, "sort" : { "enum" : [ "created" , "updated" ], "type" : "string" }, "username" : { "required" : true , "type" : "string" }}, "url" : "/users/:username/starred" }, "listReposWatchedByUser" : { "method" : "GET" , "params" : { "page" : { "type" : "integer" }, "per_page" : { "type" : "integer" }, "username" : { "required" : true , "type" : "string
2019-12-03 10:28:59 -05:00
/***/ }),
/***/ 742:
/***/ (function(module, __unusedexports, __webpack_require__) {
var fs = __webpack_require__(747)
var core
if (process.platform === 'win32' || global.TESTING_WINDOWS) {
core = __webpack_require__(818)
} else {
core = __webpack_require__(197)
}
module.exports = isexe
isexe.sync = sync
function isexe (path, options, cb) {
if (typeof options === 'function') {
cb = options
options = {}
}
if (!cb) {
if (typeof Promise !== 'function') {
throw new TypeError('callback not provided')
}
return new Promise(function (resolve, reject) {
isexe(path, options || {}, function (er, is) {
if (er) {
reject(er)
} else {
resolve(is)
}
})
})
}
core(path, options || {}, function (er, is) {
// ignore EACCES because that just means we aren't allowed to run it
if (er) {
if (er.code === 'EACCES' || options && options.ignoreErrors) {
er = null
is = false
}
}
cb(er, is)
})
}
function sync (path, options) {
// my kingdom for a filtered catch
try {
return core.sync(path, options || {})
} catch (er) {
if (options && options.ignoreErrors || er.code === 'EACCES') {
return false
} else {
throw er
}
}
}
/***/ }),
/***/ 747:
/***/ (function(module) {
module.exports = require(" fs ");
/***/ }),
/***/ 753:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
" use strict ";
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var endpoint = __webpack_require__(385);
2019-12-09 16:54:42 -05:00
var universalUserAgent = __webpack_require__(796);
2019-12-03 10:28:59 -05:00
var isPlainObject = _interopDefault(__webpack_require__(696));
var nodeFetch = _interopDefault(__webpack_require__(454));
var requestError = __webpack_require__(463);
2019-12-09 16:54:42 -05:00
const VERSION = " 5.3 . 1 ";
2019-12-03 10:28:59 -05:00
function getBufferResponse(response) {
return response.arrayBuffer();
}
function fetchWrapper(requestOptions) {
if (isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {
requestOptions.body = JSON.stringify(requestOptions.body);
}
let headers = {};
let status;
let url;
const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch;
return fetch(requestOptions.url, Object.assign({
method: requestOptions.method,
body: requestOptions.body,
headers: requestOptions.headers,
redirect: requestOptions.redirect
}, requestOptions.request)).then(response => {
url = response.url;
status = response.status;
for (const keyAndValue of response.headers) {
headers[keyAndValue[0]] = keyAndValue[1];
}
if (status === 204 || status === 205) {
return;
} // GitHub API returns 200 for HEAD requsets
if (requestOptions.method === " HEAD ") {
if (status < 400) {
return;
}
throw new requestError.RequestError(response.statusText, status, {
headers,
request: requestOptions
});
}
if (status === 304) {
throw new requestError.RequestError(" Not modified ", status, {
headers,
request: requestOptions
});
}
if (status >= 400) {
return response.text().then(message => {
const error = new requestError.RequestError(message, status, {
headers,
request: requestOptions
});
try {
2019-12-09 16:54:42 -05:00
let responseBody = JSON.parse(error.message);
Object.assign(error, responseBody);
let errors = responseBody.errors; // Assumption `errors` would always be in Array Fotmat
error.message = error.message + " : " + errors.map(JSON.stringify).join(" , ");
2019-12-03 10:28:59 -05:00
} catch (e) {// ignore, see octokit/rest.js#684
}
throw error;
});
}
const contentType = response.headers.get(" content - type ");
if (/application\/json/.test(contentType)) {
return response.json();
}
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
return response.text();
}
return getBufferResponse(response);
}).then(data => {
return {
status,
url,
headers,
data
};
}).catch(error => {
if (error instanceof requestError.RequestError) {
throw error;
}
throw new requestError.RequestError(error.message, 500, {
headers,
request: requestOptions
});
});
}
function withDefaults(oldEndpoint, newDefaults) {
const endpoint = oldEndpoint.defaults(newDefaults);
const newApi = function (route, parameters) {
const endpointOptions = endpoint.merge(route, parameters);
if (!endpointOptions.request || !endpointOptions.request.hook) {
return fetchWrapper(endpoint.parse(endpointOptions));
}
const request = (route, parameters) => {
return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));
};
Object.assign(request, {
endpoint,
defaults: withDefaults.bind(null, endpoint)
});
return endpointOptions.request.hook(request, endpointOptions);
};
return Object.assign(newApi, {
endpoint,
defaults: withDefaults.bind(null, endpoint)
});
}
const request = withDefaults(endpoint.endpoint, {
headers: {
" user - agent ": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}`
}
});
exports.request = request;
//# sourceMappingURL=index.js.map
/***/ }),
/***/ 761:
/***/ (function(module) {
module.exports = require(" zlib ");
/***/ }),
/***/ 763:
/***/ (function(module) {
module.exports = removeHook
function removeHook (state, name, method) {
if (!state.registry[name]) {
return
}
var index = state.registry[name]
.map(function (registered) { return registered.orig })
.indexOf(method)
if (index === -1) {
return
}
state.registry[name].splice(index, 1)
}
/***/ }),
/***/ 768:
/***/ (function(module) {
" use strict ";
module.exports = function (x) {
var lf = typeof x === 'string' ? '\n' : '\n'.charCodeAt();
var cr = typeof x === 'string' ? '\r' : '\r'.charCodeAt();
if (x[x.length - 1] === lf) {
x = x.slice(0, x.length - 1);
}
if (x[x.length - 1] === cr) {
x = x.slice(0, x.length - 1);
}
return x;
};
/***/ }),
/***/ 777:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = getFirstPage
const getPage = __webpack_require__(265)
function getFirstPage (octokit, link, headers) {
return getPage(octokit, link, 'first', headers)
}
2019-12-09 16:54:42 -05:00
/***/ }),
/***/ 796:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
" use strict ";
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var osName = _interopDefault(__webpack_require__(2));
function getUserAgent() {
try {
return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;
} catch (error) {
if (/wmic os get Caption/.test(error.message)) {
return " Windows < version undetectable > ";
}
throw error;
}
}
exports.getUserAgent = getUserAgent;
//# sourceMappingURL=index.js.map
2019-12-03 10:28:59 -05:00
/***/ }),
/***/ 807:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = paginate;
const iterator = __webpack_require__(8);
function paginate(octokit, route, options, mapFn) {
if (typeof options === " function ") {
mapFn = options;
options = undefined;
}
options = octokit.request.endpoint.merge(route, options);
return gather(
octokit,
[],
iterator(octokit, options)[Symbol.asyncIterator](),
mapFn
);
}
function gather(octokit, results, iterator, mapFn) {
return iterator.next().then(result => {
if (result.done) {
return results;
}
let earlyExit = false;
function done() {
earlyExit = true;
}
results = results.concat(
mapFn ? mapFn(result.value, done) : result.value.data
);
if (earlyExit) {
return results;
}
return gather(octokit, results, iterator, mapFn);
});
}
/***/ }),
/***/ 814:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = which
which.sync = whichSync
var isWindows = process.platform === 'win32' ||
process.env.OSTYPE === 'cygwin' ||
process.env.OSTYPE === 'msys'
var path = __webpack_require__(622)
var COLON = isWindows ? ';' : ':'
var isexe = __webpack_require__(742)
function getNotFoundError (cmd) {
var er = new Error('not found: ' + cmd)
er.code = 'ENOENT'
return er
}
function getPathInfo (cmd, opt) {
var colon = opt.colon || COLON
var pathEnv = opt.path || process.env.PATH || ''
var pathExt = ['']
pathEnv = pathEnv.split(colon)
var pathExtExe = ''
if (isWindows) {
pathEnv.unshift(process.cwd())
pathExtExe = (opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM')
pathExt = pathExtExe.split(colon)
// Always test the cmd itself first. isexe will check to make sure
// it's found in the pathExt set.
if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')
pathExt.unshift('')
}
// If it has a slash, then we don't bother searching the pathenv.
// just check the file itself, and that's it.
if (cmd.match(/\//) || isWindows && cmd.match(/\\/))
pathEnv = ['']
return {
env: pathEnv,
ext: pathExt,
extExe: pathExtExe
}
}
function which (cmd, opt, cb) {
if (typeof opt === 'function') {
cb = opt
opt = {}
}
var info = getPathInfo(cmd, opt)
var pathEnv = info.env
var pathExt = info.ext
var pathExtExe = info.extExe
var found = []
;(function F (i, l) {
if (i === l) {
if (opt.all && found.length)
return cb(null, found)
else
return cb(getNotFoundError(cmd))
}
var pathPart = pathEnv[i]
if (pathPart.charAt(0) === '" ' && pathPart.slice(-1) === ' "')
pathPart = pathPart.slice(1, -1)
var p = path.join(pathPart, cmd)
if (!pathPart && (/^\.[\\\/]/).test(cmd)) {
p = cmd.slice(0, 2) + p
}
;(function E (ii, ll) {
if (ii === ll) return F(i + 1, l)
var ext = pathExt[ii]
isexe(p + ext, { pathExt: pathExtExe }, function (er, is) {
if (!er && is) {
if (opt.all)
found.push(p + ext)
else
return cb(null, p + ext)
}
return E(ii + 1, ll)
})
})(0, pathExt.length)
})(0, pathEnv.length)
}
function whichSync (cmd, opt) {
opt = opt || {}
var info = getPathInfo(cmd, opt)
var pathEnv = info.env
var pathExt = info.ext
var pathExtExe = info.extExe
var found = []
for (var i = 0, l = pathEnv.length; i < l; i ++) {
var pathPart = pathEnv[i]
if (pathPart.charAt(0) === '" ' && pathPart.slice(-1) === ' "')
pathPart = pathPart.slice(1, -1)
var p = path.join(pathPart, cmd)
if (!pathPart && /^\.[\\\/]/.test(cmd)) {
p = cmd.slice(0, 2) + p
}
for (var j = 0, ll = pathExt.length; j < ll; j ++) {
var cur = p + pathExt[j]
var is
try {
is = isexe.sync(cur, { pathExt: pathExtExe })
if (is) {
if (opt.all)
found.push(cur)
else
return cur
}
} catch (ex) {}
}
}
if (opt.all && found.length)
return found
if (opt.nothrow)
return null
throw getNotFoundError(cmd)
}
/***/ }),
/***/ 816:
/***/ (function(module) {
" use strict ";
module.exports = /^#!.*/;
/***/ }),
/***/ 818:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = isexe
isexe.sync = sync
var fs = __webpack_require__(747)
function checkPathExt (path, options) {
var pathext = options.pathExt !== undefined ?
options.pathExt : process.env.PATHEXT
if (!pathext) {
return true
}
pathext = pathext.split(';')
if (pathext.indexOf('') !== -1) {
return true
}
for (var i = 0; i < pathext.length; i++) {
var p = pathext[i].toLowerCase()
if (p && path.substr(-p.length).toLowerCase() === p) {
return true
}
}
return false
}
function checkStat (stat, path, options) {
if (!stat.isSymbolicLink() && !stat.isFile()) {
return false
}
return checkPathExt(path, options)
}
function isexe (path, options, cb) {
fs.stat(path, function (er, stat) {
cb(er, er ? false : checkStat(stat, path, options))
})
}
function sync (path, options) {
return checkStat(fs.statSync(path), path, options)
}
/***/ }),
/***/ 821:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
" use strict ";
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(__webpack_require__(470));
const fsHelper = __importStar(__webpack_require__(618));
const github = __importStar(__webpack_require__(469));
const path = __importStar(__webpack_require__(622));
function getInputs() {
const result = {};
// GitHub workspace
let githubWorkspacePath = process.env['GITHUB_WORKSPACE'];
if (!githubWorkspacePath) {
throw new Error('GITHUB_WORKSPACE not defined');
}
githubWorkspacePath = path.resolve(githubWorkspacePath);
core.debug(`GITHUB_WORKSPACE = '${githubWorkspacePath}'`);
fsHelper.directoryExistsSync(githubWorkspacePath, true);
// Qualified repository
const qualifiedRepository = core.getInput('repository') ||
`${github.context.repo.owner}/${github.context.repo.repo}`;
core.debug(`qualified repository = '${qualifiedRepository}'`);
const splitRepository = qualifiedRepository.split('/');
if (splitRepository.length !== 2 ||
!splitRepository[0] ||
!splitRepository[1]) {
throw new Error(`Invalid repository '${qualifiedRepository}'. Expected format {owner}/{repo}.`);
}
result.repositoryOwner = splitRepository[0];
result.repositoryName = splitRepository[1];
// Repository path
result.repositoryPath = core.getInput('path') || '.';
result.repositoryPath = path.resolve(githubWorkspacePath, result.repositoryPath);
if (!(result.repositoryPath + path.sep).startsWith(githubWorkspacePath + path.sep)) {
throw new Error(`Repository path '${result.repositoryPath}' is not under '${githubWorkspacePath}'`);
}
// Workflow repository?
const isWorkflowRepository = qualifiedRepository.toUpperCase() ===
`${github.context.repo.owner}/${github.context.repo.repo}`.toUpperCase();
// Source branch, source version
result.ref = core.getInput('ref');
if (!result.ref) {
if (isWorkflowRepository) {
result.ref = github.context.ref;
result.commit = github.context.sha;
}
if (!result.ref && !result.commit) {
result.ref = 'refs/heads/master';
}
}
// SHA?
else if (result.ref.match(/^[0-9a-fA-F]{40}$/)) {
result.commit = result.ref;
result.ref = '';
}
core.debug(`ref = '${result.ref}'`);
core.debug(`commit = '${result.commit}'`);
// Clean
result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE';
core.debug(`clean = ${result.clean}`);
// Submodules
if (core.getInput('submodules')) {
throw new Error(" The input 'submodules' is not supported in actions / checkout @ v2 ");
}
// Fetch depth
result.fetchDepth = Math.floor(Number(core.getInput('fetch-depth') || '1'));
if (isNaN(result.fetchDepth) || result.fetchDepth < 0) {
result.fetchDepth = 0;
}
core.debug(`fetch depth = ${result.fetchDepth}`);
// LFS
result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE';
core.debug(`lfs = ${result.lfs}`);
// Access token
result.accessToken = core.getInput('token');
return result;
}
exports.getInputs = getInputs;
/***/ }),
/***/ 835:
/***/ (function(module) {
module.exports = require(" url ");
/***/ }),
/***/ 850:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = paginationMethodsPlugin
function paginationMethodsPlugin (octokit) {
octokit.getFirstPage = __webpack_require__(777).bind(null, octokit)
octokit.getLastPage = __webpack_require__(649).bind(null, octokit)
octokit.getNextPage = __webpack_require__(550).bind(null, octokit)
octokit.getPreviousPage = __webpack_require__(563).bind(null, octokit)
octokit.hasFirstPage = __webpack_require__(536)
octokit.hasLastPage = __webpack_require__(336)
octokit.hasNextPage = __webpack_require__(929)
octokit.hasPreviousPage = __webpack_require__(558)
}
/***/ }),
/***/ 854:
/***/ (function(module) {
/**
* lodash (Custom Build) <https://lodash.com/>
* Build: `lodash modularize exports=" npm " -o ./`
* Copyright jQuery Foundation and other contributors <https://jquery.org/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*/
/** Used as the `TypeError` message for " Functions " methods. */
var FUNC_ERROR_TEXT = 'Expected a function';
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';
/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;
/** `Object#toString` result references. */
var funcTag = '[object Function]',
genTag = '[object GeneratorFunction]',
symbolTag = '[object Symbol]';
/** Used to match property names within property paths. */
var reIsDeepProp = /\.|\[(?:[^[\]]*|([" '])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
reIsPlainProp = /^\w*$/,
reLeadingDot = /^\./,
rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["' ])(( ?: ( ?! \ 2 )[ ^ \\ ] | \\ .) *? ) \ 2 ) \ ] | ( ?= ( ?: \ . | \ [ \ ])( ?: \ . | \ [ \ ] | $ )) / g ;
/**
* Used to match `RegExp`
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
*/
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g ;
/** Used to match backslashes in property paths. */
var reEscapeChar = /\\(\\)?/g ;
/** Used to detect host constructors (Safari). */
var reIsHostCtor = /^\[object .+?Constructor\]$/ ;
/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global . Object === Object && global ;
/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self . Object === Object && self ;
/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function ( 'return this' )();
/**
* Gets the value at `key` of `object`.
*
* @private
* @param {Object} [object] The object to query.
* @param {string} key The key of the property to get.
* @returns {*} Returns the property value.
*/
function getValue ( object , key ) {
return object == null ? undefined : object [ key ];
}
/**
* Checks if `value` is a host object in IE < 9.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a host object, else `false`.
*/
function isHostObject ( value ) {
// Many host objects are `Object` objects that can coerce to strings
// despite having improperly defined `toString` methods.
var result = false ;
if ( value != null && typeof value . toString != 'function' ) {
try {
result = !! ( value + '' );
} catch ( e ) {}
}
return result ;
}
/** Used for built-in method references. */
var arrayProto = Array . prototype ,
funcProto = Function . prototype ,
objectProto = Object . prototype ;
/** Used to detect overreaching core-js shims. */
var coreJsData = root [ '__core-js_shared__' ];
/** Used to detect methods masquerading as native. */
var maskSrcKey = ( function () {
var uid = /[^.]+$/ . exec ( coreJsData && coreJsData . keys && coreJsData . keys . IE_PROTO || '' );
return uid ? ( 'Symbol(src)_1.' + uid ) : '' ;
}());
/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto . toString ;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto . hasOwnProperty ;
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
var objectToString = objectProto . toString ;
/** Used to detect if a method is native. */
var reIsNative = RegExp ( '^' +
funcToString . call ( hasOwnProperty ). replace ( reRegExpChar , '\\$&' )
. replace ( /hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g , '$1.*?' ) + '$'
);
/** Built-in value references. */
var Symbol = root . Symbol ,
splice = arrayProto . splice ;
/* Built-in method references that are verified to be native. */
var Map = getNative ( root , 'Map' ),
nativeCreate = getNative ( Object , 'create' );
/** Used to convert symbols to primitives and strings. */
var symbolProto = Symbol ? Symbol . prototype : undefined ,
symbolToString = symbolProto ? symbolProto . toString : undefined ;
/**
* Creates a hash object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function Hash ( entries ) {
var index = - 1 ,
length = entries ? entries . length : 0 ;
this . clear ();
while ( ++ index < length ) {
var entry = entries [ index ];
this . set ( entry [ 0 ], entry [ 1 ]);
}
}
/**
* Removes all key-value entries from the hash.
*
* @private
* @name clear
* @memberOf Hash
*/
function hashClear () {
this . __data__ = nativeCreate ? nativeCreate ( null ) : {};
}
/**
* Removes `key` and its value from the hash.
*
* @private
* @name delete
* @memberOf Hash
* @param {Object} hash The hash to modify.
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function hashDelete ( key ) {
return this . has ( key ) && delete this . __data__ [ key ];
}
/**
* Gets the hash value for `key`.
*
* @private
* @name get
* @memberOf Hash
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function hashGet ( key ) {
var data = this . __data__ ;
if ( nativeCreate ) {
var result = data [ key ];
return result === HASH_UNDEFINED ? undefined : result ;
}
return hasOwnProperty . call ( data , key ) ? data [ key ] : undefined ;
}
/**
* Checks if a hash value for `key` exists.
*
* @private
* @name has
* @memberOf Hash
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function hashHas ( key ) {
var data = this . __data__ ;
return nativeCreate ? data [ key ] !== undefined : hasOwnProperty . call ( data , key );
}
/**
* Sets the hash `key` to `value`.
*
* @private
* @name set
* @memberOf Hash
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the hash instance.
*/
function hashSet ( key , value ) {
var data = this . __data__ ;
data [ key ] = ( nativeCreate && value === undefined ) ? HASH_UNDEFINED : value ;
return this ;
}
// Add methods to `Hash`.
Hash . prototype . clear = hashClear ;
Hash . prototype [ 'delete' ] = hashDelete ;
Hash . prototype . get = hashGet ;
Hash . prototype . has = hashHas ;
Hash . prototype . set = hashSet ;
/**
* Creates an list cache object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function ListCache ( entries ) {
var index = - 1 ,
length = entries ? entries . length : 0 ;
this . clear ();
while ( ++ index < length ) {
var entry = entries [ index ];
this . set ( entry [ 0 ], entry [ 1 ]);
}
}
/**
* Removes all key-value entries from the list cache.
*
* @private
* @name clear
* @memberOf ListCache
*/
function listCacheClear () {
this . __data__ = [];
}
/**
* Removes `key` and its value from the list cache.
*
* @private
* @name delete
* @memberOf ListCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function listCacheDelete ( key ) {
var data = this . __data__ ,
index = assocIndexOf ( data , key );
if ( index < 0 ) {
return false ;
}
var lastIndex = data . length - 1 ;
if ( index == lastIndex ) {
data . pop ();
} else {
splice . call ( data , index , 1 );
}
return true ;
}
/**
* Gets the list cache value for `key`.
*
* @private
* @name get
* @memberOf ListCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function listCacheGet ( key ) {
var data = this . __data__ ,
index = assocIndexOf ( data , key );
return index < 0 ? undefined : data [ index ][ 1 ];
}
/**
* Checks if a list cache value for `key` exists.
*
* @private
* @name has
* @memberOf ListCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function listCacheHas ( key ) {
return assocIndexOf ( this . __data__ , key ) > - 1 ;
}
/**
* Sets the list cache `key` to `value`.
*
* @private
* @name set
* @memberOf ListCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the list cache instance.
*/
function listCacheSet ( key , value ) {
var data = this . __data__ ,
index = assocIndexOf ( data , key );
if ( index < 0 ) {
data . push ([ key , value ]);
} else {
data [ index ][ 1 ] = value ;
}
return this ;
}
// Add methods to `ListCache`.
ListCache . prototype . clear = listCacheClear ;
ListCache . prototype [ 'delete' ] = listCacheDelete ;
ListCache . prototype . get = listCacheGet ;
ListCache . prototype . has = listCacheHas ;
ListCache . prototype . set = listCacheSet ;
/**
* Creates a map cache object to store key-value pairs.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function MapCache ( entries ) {
var index = - 1 ,
length = entries ? entries . length : 0 ;
this . clear ();
while ( ++ index < length ) {
var entry = entries [ index ];
this . set ( entry [ 0 ], entry [ 1 ]);
}
}
/**
* Removes all key-value entries from the map.
*
* @private
* @name clear
* @memberOf MapCache
*/
function mapCacheClear () {
this . __data__ = {
'hash' : new Hash ,
'map' : new ( Map || ListCache ),
'string' : new Hash
};
}
/**
* Removes `key` and its value from the map.
*
* @private
* @name delete
* @memberOf MapCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function mapCacheDelete ( key ) {
return getMapData ( this , key )[ 'delete' ]( key );
}
/**
* Gets the map value for `key`.
*
* @private
* @name get
* @memberOf MapCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function mapCacheGet ( key ) {
return getMapData ( this , key ). get ( key );
}
/**
* Checks if a map value for `key` exists.
*
* @private
* @name has
* @memberOf MapCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function mapCacheHas ( key ) {
return getMapData ( this , key ). has ( key );
}
/**
* Sets the map `key` to `value`.
*
* @private
* @name set
* @memberOf MapCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the map cache instance.
*/
function mapCacheSet ( key , value ) {
getMapData ( this , key ). set ( key , value );
return this ;
}
// Add methods to `MapCache`.
MapCache . prototype . clear = mapCacheClear ;
MapCache . prototype [ 'delete' ] = mapCacheDelete ;
MapCache . prototype . get = mapCacheGet ;
MapCache . prototype . has = mapCacheHas ;
MapCache . prototype . set = mapCacheSet ;
/**
* Gets the index at which the `key` is found in `array` of key-value pairs.
*
* @private
* @param {Array} array The array to inspect.
* @param {*} key The key to search for.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function assocIndexOf ( array , key ) {
var length = array . length ;
while ( length -- ) {
if ( eq ( array [ length ][ 0 ], key )) {
return length ;
}
}
return - 1 ;
}
/**
* The base implementation of `_.get` without support for default values.
*
* @private
* @param {Object} object The object to query.
* @param {Array|string} path The path of the property to get.
* @returns {*} Returns the resolved value.
*/
function baseGet ( object , path ) {
path = isKey ( path , object ) ? [ path ] : castPath ( path );
var index = 0 ,
length = path . length ;
while ( object != null && index < length ) {
object = object [ toKey ( path [ index ++ ])];
}
return ( index && index == length ) ? object : undefined ;
}
/**
* The base implementation of `_.isNative` without bad shim checks.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a native function,
* else `false`.
*/
function baseIsNative ( value ) {
if ( ! isObject ( value ) || isMasked ( value )) {
return false ;
}
var pattern = ( isFunction ( value ) || isHostObject ( value )) ? reIsNative : reIsHostCtor ;
return pattern . test ( toSource ( value ));
}
/**
* The base implementation of `_.toString` which doesn't convert nullish
* values to empty strings.
*
* @private
* @param {*} value The value to process.
* @returns {string} Returns the string.
*/
function baseToString ( value ) {
// Exit early for strings to avoid a performance hit in some environments.
if ( typeof value == 'string' ) {
return value ;
}
if ( isSymbol ( value )) {
return symbolToString ? symbolToString . call ( value ) : '' ;
}
var result = ( value + '' );
return ( result == '0' && ( 1 / value ) == - INFINITY ) ? '-0' : result ;
}
/**
* Casts `value` to a path array if it's not one.
*
* @private
* @param {*} value The value to inspect.
* @returns {Array} Returns the cast property path array.
*/
function castPath ( value ) {
return isArray ( value ) ? value : stringToPath ( value );
}
/**
* Gets the data for `map`.
*
* @private
* @param {Object} map The map to query.
* @param {string} key The reference key.
* @returns {*} Returns the map data.
*/
function getMapData ( map , key ) {
var data = map . __data__ ;
return isKeyable ( key )
? data [ typeof key == 'string' ? 'string' : 'hash' ]
: data . map ;
}
/**
* Gets the native function at `key` of `object`.
*
* @private
* @param {Object} object The object to query.
* @param {string} key The key of the method to get.
* @returns {*} Returns the function if it's native, else `undefined`.
*/
function getNative ( object , key ) {
var value = getValue ( object , key );
return baseIsNative ( value ) ? value : undefined ;
}
/**
* Checks if `value` is a property name and not a property path.
*
* @private
* @param {*} value The value to check.
* @param {Object} [object] The object to query keys on.
* @returns {boolean} Returns `true` if `value` is a property name, else `false`.
*/
function isKey ( value , object ) {
if ( isArray ( value )) {
return false ;
}
var type = typeof value ;
if ( type == 'number' || type == 'symbol' || type == 'boolean' ||
value == null || isSymbol ( value )) {
return true ;
}
return reIsPlainProp . test ( value ) || ! reIsDeepProp . test ( value ) ||
( object != null && value in Object ( object ));
}
/**
* Checks if `value` is suitable for use as unique object key.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
*/
function isKeyable ( value ) {
var type = typeof value ;
return ( type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' )
? ( value !== '__proto__' )
: ( value === null );
}
/**
* Checks if `func` has its source masked.
*
* @private
* @param {Function} func The function to check.
* @returns {boolean} Returns `true` if `func` is masked, else `false`.
*/
function isMasked ( func ) {
return !! maskSrcKey && ( maskSrcKey in func );
}
/**
* Converts `string` to a property path array.
*
* @private
* @param {string} string The string to convert.
* @returns {Array} Returns the property path array.
*/
var stringToPath = memoize ( function ( string ) {
string = toString ( string );
var result = [];
if ( reLeadingDot . test ( string )) {
result . push ( '' );
}
string . replace ( rePropName , function ( match , number , quote , string ) {
result . push ( quote ? string . replace ( reEscapeChar , '$1' ) : ( number || match ));
});
return result ;
});
/**
* Converts `value` to a string key if it's not a string or symbol.
*
* @private
* @param {*} value The value to inspect.
* @returns {string|symbol} Returns the key.
*/
function toKey ( value ) {
if ( typeof value == 'string' || isSymbol ( value )) {
return value ;
}
var result = ( value + '' );
return ( result == '0' && ( 1 / value ) == - INFINITY ) ? '-0' : result ;
}
/**
* Converts `func` to its source code.
*
* @private
* @param {Function} func The function to process.
* @returns {string} Returns the source code.
*/
function toSource ( func ) {
if ( func != null ) {
try {
return funcToString . call ( func );
} catch ( e ) {}
try {
return ( func + '' );
} catch ( e ) {}
}
return '' ;
}
/**
* Creates a function that memoizes the result of `func`. If `resolver` is
* provided, it determines the cache key for storing the result based on the
* arguments provided to the memoized function. By default, the first argument
* provided to the memoized function is used as the map cache key. The `func`
* is invoked with the `this` binding of the memoized function.
*
* **Note:** The cache is exposed as the `cache` property on the memoized
* function. Its creation may be customized by replacing the `_.memoize.Cache`
* constructor with one whose instances implement the
* [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
* method interface of `delete`, `get`, `has`, and `set`.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Function
* @param {Function} func The function to have its output memoized.
* @param {Function} [resolver] The function to resolve the cache key.
* @returns {Function} Returns the new memoized function.
* @example
*
* var object = { 'a': 1, 'b': 2 };
* var other = { 'c': 3, 'd': 4 };
*
* var values = _.memoize(_.values);
* values(object);
* // => [1, 2]
*
* values(other);
* // => [3, 4]
*
* object.a = 2;
* values(object);
* // => [1, 2]
*
* // Modify the result cache.
* values.cache.set(object, ['a', 'b']);
* values(object);
* // => ['a', 'b']
*
* // Replace `_.memoize.Cache`.
* _.memoize.Cache = WeakMap;
*/
function memoize ( func , resolver ) {
if ( typeof func != 'function' || ( resolver && typeof resolver != 'function' )) {
throw new TypeError ( FUNC_ERROR_TEXT );
}
var memoized = function () {
var args = arguments ,
key = resolver ? resolver . apply ( this , args ) : args [ 0 ],
cache = memoized . cache ;
if ( cache . has ( key )) {
return cache . get ( key );
}
var result = func . apply ( this , args );
memoized . cache = cache . set ( key , result );
return result ;
};
memoized . cache = new ( memoize . Cache || MapCache );
return memoized ;
}
// Assign cache to `_.memoize`.
memoize . Cache = MapCache ;
/**
* Performs a
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* comparison between two values to determine if they are equivalent.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
* @example
*
* var object = { 'a': 1 };
* var other = { 'a': 1 };
*
* _.eq(object, object);
* // => true
*
* _.eq(object, other);
* // => false
*
* _.eq('a', 'a');
* // => true
*
* _.eq('a', Object('a'));
* // => false
*
* _.eq(NaN, NaN);
* // => true
*/
function eq ( value , other ) {
return value === other || ( value !== value && other !== other );
}
/**
* Checks if `value` is classified as an `Array` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an array, else `false`.
* @example
*
* _.isArray([1, 2, 3]);
* // => true
*
* _.isArray(document.body.children);
* // => false
*
* _.isArray('abc');
* // => false
*
* _.isArray(_.noop);
* // => false
*/
var isArray = Array . isArray ;
/**
* Checks if `value` is classified as a `Function` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a function, else `false`.
* @example
*
* _.isFunction(_);
* // => true
*
* _.isFunction(/abc/);
* // => false
*/
function isFunction ( value ) {
// The use of `Object#toString` avoids issues with the `typeof` operator
// in Safari 8-9 which returns 'object' for typed array and other constructors.
var tag = isObject ( value ) ? objectToString . call ( value ) : '' ;
return tag == funcTag || tag == genTag ;
}
/**
* Checks if `value` is the
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an object, else `false`.
* @example
*
* _.isObject({});
* // => true
*
* _.isObject([1, 2, 3]);
* // => true
*
* _.isObject(_.noop);
* // => true
*
* _.isObject(null);
* // => false
*/
function isObject ( value ) {
var type = typeof value ;
return !! value && ( type == 'object' || type == 'function' );
}
/**
* Checks if `value` is object-like. A value is object-like if it's not `null`
* and has a `typeof` result of "object".
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
* @example
*
* _.isObjectLike({});
* // => true
*
* _.isObjectLike([1, 2, 3]);
* // => true
*
* _.isObjectLike(_.noop);
* // => false
*
* _.isObjectLike(null);
* // => false
*/
function isObjectLike ( value ) {
return !! value && typeof value == 'object' ;
}
/**
* Checks if `value` is classified as a `Symbol` primitive or object.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
* @example
*
* _.isSymbol(Symbol.iterator);
* // => true
*
* _.isSymbol('abc');
* // => false
*/
function isSymbol ( value ) {
return typeof value == 'symbol' ||
( isObjectLike ( value ) && objectToString . call ( value ) == symbolTag );
}
/**
* Converts `value` to a string. An empty string is returned for `null`
* and `undefined` values. The sign of `-0` is preserved.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to process.
* @returns {string} Returns the string.
* @example
*
* _.toString(null);
* // => ''
*
* _.toString(-0);
* // => '-0'
*
* _.toString([1, 2, 3]);
* // => '1,2,3'
*/
function toString ( value ) {
return value == null ? '' : baseToString ( value );
}
/**
* Gets the value at `path` of `object`. If the resolved value is
* `undefined`, the `defaultValue` is returned in its place.
*
* @static
* @memberOf _
* @since 3.7.0
* @category Object
* @param {Object} object The object to query.
* @param {Array|string} path The path of the property to get.
* @param {*} [defaultValue] The value returned for `undefined` resolved values.
* @returns {*} Returns the resolved value.
* @example
*
* var object = { 'a': [{ 'b': { 'c': 3 } }] };
*
* _.get(object, 'a[0].b.c');
* // => 3
*
* _.get(object, ['a', '0', 'b', 'c']);
* // => 3
*
* _.get(object, 'a.b.c', 'default');
* // => 'default'
*/
function get ( object , path , defaultValue ) {
var result = object == null ? undefined : baseGet ( object , path );
return result === undefined ? defaultValue : result ;
}
module . exports = get ;
/***/ }),
/***/ 855 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = registerPlugin ;
const factory = __webpack_require__ ( 47 );
function registerPlugin ( plugins , pluginFunction ) {
return factory (
plugins . includes ( pluginFunction ) ? plugins : plugins . concat ( pluginFunction )
);
}
/***/ }),
/***/ 863 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = authenticationBeforeRequest ;
const btoa = __webpack_require__ ( 675 );
const withAuthorizationPrefix = __webpack_require__ ( 143 );
function authenticationBeforeRequest ( state , options ) {
if ( typeof state . auth === "string" ) {
options . headers . authorization = withAuthorizationPrefix ( state . auth );
// https://developer.github.com/v3/previews/#integrations
if (
/^bearer /i . test ( state . auth ) &&
! /machine-man/ . test ( options . headers . accept )
) {
const acceptHeaders = options . headers . accept
. split ( "," )
. concat ( "application/vnd.github.machine-man-preview+json" );
options . headers . accept = acceptHeaders . filter ( Boolean ). join ( "," );
}
return ;
}
if ( state . auth . username ) {
const hash = btoa ( ` ${ state . auth . username } : ${ state . auth . password } ` );
options . headers . authorization = `Basic ${ hash } ` ;
if ( state . otp ) {
options . headers [ "x-github-otp" ] = state . otp ;
}
return ;
}
if ( state . auth . clientId ) {
// There is a special case for OAuth applications, when `clientId` and `clientSecret` is passed as
// Basic Authorization instead of query parameters. The only routes where that applies share the same
// URL though: `/applications/:client_id/tokens/:access_token`.
//
// 1. [Check an authorization](https://developer.github.com/v3/oauth_authorizations/#check-an-authorization)
// 2. [Reset an authorization](https://developer.github.com/v3/oauth_authorizations/#reset-an-authorization)
// 3. [Revoke an authorization for an application](https://developer.github.com/v3/oauth_authorizations/#revoke-an-authorization-for-an-application)
//
// We identify by checking the URL. It must merge both "/applications/:client_id/tokens/:access_token"
// as well as "/applications/123/tokens/token456"
if ( /\/applications\/:?[\w_]+\/tokens\/:?[\w_]+($|\?)/ . test ( options . url )) {
const hash = btoa ( ` ${ state . auth . clientId } : ${ state . auth . clientSecret } ` );
options . headers . authorization = `Basic ${ hash } ` ;
return ;
}
options . url += options . url . indexOf ( "?" ) === - 1 ? "?" : "&" ;
options . url += `client_id= ${ state . auth . clientId } &client_secret= ${ state . auth . clientSecret } ` ;
return ;
}
return Promise . resolve ()
. then (() => {
return state . auth ();
})
. then ( authorization => {
options . headers . authorization = withAuthorizationPrefix ( authorization );
});
}
/***/ }),
/***/ 866 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
var shebangRegex = __webpack_require__ ( 816 );
module . exports = function ( str ) {
var match = str . match ( shebangRegex );
if ( ! match ) {
return null ;
}
var arr = match [ 0 ]. replace ( /#! ?/ , '' ). split ( ' ' );
var bin = arr [ 0 ]. split ( '/' ). pop ();
var arg = arr [ 1 ];
return ( bin === 'env' ?
arg :
bin + ( arg ? ' ' + arg : '' )
);
};
/***/ }),
/***/ 881 :
/***/ ( function ( module ) {
"use strict" ;
const isWin = process . platform === 'win32' ;
function notFoundError ( original , syscall ) {
return Object . assign ( new Error ( ` ${ syscall } ${ original . command } ENOENT` ), {
code : 'ENOENT' ,
errno : 'ENOENT' ,
syscall : ` ${ syscall } ${ original . command } ` ,
path : original . command ,
spawnargs : original . args ,
});
}
function hookChildProcess ( cp , parsed ) {
if ( ! isWin ) {
return ;
}
const originalEmit = cp . emit ;
cp . emit = function ( name , arg1 ) {
// If emitting "exit" event and exit code is 1, we need to check if
// the command exists and emit an "error" instead
// See https://github.com/IndigoUnited/node-cross-spawn/issues/16
if ( name === 'exit' ) {
const err = verifyENOENT ( arg1 , parsed , 'spawn' );
if ( err ) {
return originalEmit . call ( cp , 'error' , err );
}
}
return originalEmit . apply ( cp , arguments ); // eslint-disable-line prefer-rest-params
};
}
function verifyENOENT ( status , parsed ) {
if ( isWin && status === 1 && ! parsed . file ) {
return notFoundError ( parsed . original , 'spawn' );
}
return null ;
}
function verifyENOENTSync ( status , parsed ) {
if ( isWin && status === 1 && ! parsed . file ) {
return notFoundError ( parsed . original , 'spawnSync' );
}
return null ;
}
module . exports = {
hookChildProcess ,
verifyENOENT ,
verifyENOENTSync ,
notFoundError ,
};
/***/ }),
/***/ 883 :
/***/ ( function ( module ) {
/**
* lodash (Custom Build) <https://lodash.com/>
* Build: `lodash modularize exports="npm" -o ./`
* Copyright jQuery Foundation and other contributors <https://jquery.org/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*/
/** Used as the `TypeError` message for "Functions" methods. */
var FUNC_ERROR_TEXT = 'Expected a function' ;
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__' ;
/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0 ,
MAX_SAFE_INTEGER = 9007199254740991 ;
/** `Object#toString` result references. */
var funcTag = '[object Function]' ,
genTag = '[object GeneratorFunction]' ,
symbolTag = '[object Symbol]' ;
/** Used to match property names within property paths. */
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/ ,
reIsPlainProp = /^\w*$/ ,
reLeadingDot = /^\./ ,
rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g ;
/**
* Used to match `RegExp`
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
*/
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g ;
/** Used to match backslashes in property paths. */
var reEscapeChar = /\\(\\)?/g ;
/** Used to detect host constructors (Safari). */
var reIsHostCtor = /^\[object .+?Constructor\]$/ ;
/** Used to detect unsigned integer values. */
var reIsUint = /^(?:0|[1-9]\d*)$/ ;
/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global . Object === Object && global ;
/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self . Object === Object && self ;
/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function ( 'return this' )();
/**
* Gets the value at `key` of `object`.
*
* @private
* @param {Object} [object] The object to query.
* @param {string} key The key of the property to get.
* @returns {*} Returns the property value.
*/
function getValue ( object , key ) {
return object == null ? undefined : object [ key ];
}
/**
* Checks if `value` is a host object in IE < 9.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a host object, else `false`.
*/
function isHostObject ( value ) {
// Many host objects are `Object` objects that can coerce to strings
// despite having improperly defined `toString` methods.
var result = false ;
if ( value != null && typeof value . toString != 'function' ) {
try {
result = !! ( value + '' );
} catch ( e ) {}
}
return result ;
}
/** Used for built-in method references. */
var arrayProto = Array . prototype ,
funcProto = Function . prototype ,
objectProto = Object . prototype ;
/** Used to detect overreaching core-js shims. */
var coreJsData = root [ '__core-js_shared__' ];
/** Used to detect methods masquerading as native. */
var maskSrcKey = ( function () {
var uid = /[^.]+$/ . exec ( coreJsData && coreJsData . keys && coreJsData . keys . IE_PROTO || '' );
return uid ? ( 'Symbol(src)_1.' + uid ) : '' ;
}());
/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto . toString ;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto . hasOwnProperty ;
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
var objectToString = objectProto . toString ;
/** Used to detect if a method is native. */
var reIsNative = RegExp ( '^' +
funcToString . call ( hasOwnProperty ). replace ( reRegExpChar , '\\$&' )
. replace ( /hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g , '$1.*?' ) + '$'
);
/** Built-in value references. */
var Symbol = root . Symbol ,
splice = arrayProto . splice ;
/* Built-in method references that are verified to be native. */
var Map = getNative ( root , 'Map' ),
nativeCreate = getNative ( Object , 'create' );
/** Used to convert symbols to primitives and strings. */
var symbolProto = Symbol ? Symbol . prototype : undefined ,
symbolToString = symbolProto ? symbolProto . toString : undefined ;
/**
* Creates a hash object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function Hash ( entries ) {
var index = - 1 ,
length = entries ? entries . length : 0 ;
this . clear ();
while ( ++ index < length ) {
var entry = entries [ index ];
this . set ( entry [ 0 ], entry [ 1 ]);
}
}
/**
* Removes all key-value entries from the hash.
*
* @private
* @name clear
* @memberOf Hash
*/
function hashClear () {
this . __data__ = nativeCreate ? nativeCreate ( null ) : {};
}
/**
* Removes `key` and its value from the hash.
*
* @private
* @name delete
* @memberOf Hash
* @param {Object} hash The hash to modify.
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function hashDelete ( key ) {
return this . has ( key ) && delete this . __data__ [ key ];
}
/**
* Gets the hash value for `key`.
*
* @private
* @name get
* @memberOf Hash
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function hashGet ( key ) {
var data = this . __data__ ;
if ( nativeCreate ) {
var result = data [ key ];
return result === HASH_UNDEFINED ? undefined : result ;
}
return hasOwnProperty . call ( data , key ) ? data [ key ] : undefined ;
}
/**
* Checks if a hash value for `key` exists.
*
* @private
* @name has
* @memberOf Hash
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function hashHas ( key ) {
var data = this . __data__ ;
return nativeCreate ? data [ key ] !== undefined : hasOwnProperty . call ( data , key );
}
/**
* Sets the hash `key` to `value`.
*
* @private
* @name set
* @memberOf Hash
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the hash instance.
*/
function hashSet ( key , value ) {
var data = this . __data__ ;
data [ key ] = ( nativeCreate && value === undefined ) ? HASH_UNDEFINED : value ;
return this ;
}
// Add methods to `Hash`.
Hash . prototype . clear = hashClear ;
Hash . prototype [ 'delete' ] = hashDelete ;
Hash . prototype . get = hashGet ;
Hash . prototype . has = hashHas ;
Hash . prototype . set = hashSet ;
/**
* Creates an list cache object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function ListCache ( entries ) {
var index = - 1 ,
length = entries ? entries . length : 0 ;
this . clear ();
while ( ++ index < length ) {
var entry = entries [ index ];
this . set ( entry [ 0 ], entry [ 1 ]);
}
}
/**
* Removes all key-value entries from the list cache.
*
* @private
* @name clear
* @memberOf ListCache
*/
function listCacheClear () {
this . __data__ = [];
}
/**
* Removes `key` and its value from the list cache.
*
* @private
* @name delete
* @memberOf ListCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function listCacheDelete ( key ) {
var data = this . __data__ ,
index = assocIndexOf ( data , key );
if ( index < 0 ) {
return false ;
}
var lastIndex = data . length - 1 ;
if ( index == lastIndex ) {
data . pop ();
} else {
splice . call ( data , index , 1 );
}
return true ;
}
/**
* Gets the list cache value for `key`.
*
* @private
* @name get
* @memberOf ListCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function listCacheGet ( key ) {
var data = this . __data__ ,
index = assocIndexOf ( data , key );
return index < 0 ? undefined : data [ index ][ 1 ];
}
/**
* Checks if a list cache value for `key` exists.
*
* @private
* @name has
* @memberOf ListCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function listCacheHas ( key ) {
return assocIndexOf ( this . __data__ , key ) > - 1 ;
}
/**
* Sets the list cache `key` to `value`.
*
* @private
* @name set
* @memberOf ListCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the list cache instance.
*/
function listCacheSet ( key , value ) {
var data = this . __data__ ,
index = assocIndexOf ( data , key );
if ( index < 0 ) {
data . push ([ key , value ]);
} else {
data [ index ][ 1 ] = value ;
}
return this ;
}
// Add methods to `ListCache`.
ListCache . prototype . clear = listCacheClear ;
ListCache . prototype [ 'delete' ] = listCacheDelete ;
ListCache . prototype . get = listCacheGet ;
ListCache . prototype . has = listCacheHas ;
ListCache . prototype . set = listCacheSet ;
/**
* Creates a map cache object to store key-value pairs.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function MapCache ( entries ) {
var index = - 1 ,
length = entries ? entries . length : 0 ;
this . clear ();
while ( ++ index < length ) {
var entry = entries [ index ];
this . set ( entry [ 0 ], entry [ 1 ]);
}
}
/**
* Removes all key-value entries from the map.
*
* @private
* @name clear
* @memberOf MapCache
*/
function mapCacheClear () {
this . __data__ = {
'hash' : new Hash ,
'map' : new ( Map || ListCache ),
'string' : new Hash
};
}
/**
* Removes `key` and its value from the map.
*
* @private
* @name delete
* @memberOf MapCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function mapCacheDelete ( key ) {
return getMapData ( this , key )[ 'delete' ]( key );
}
/**
* Gets the map value for `key`.
*
* @private
* @name get
* @memberOf MapCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function mapCacheGet ( key ) {
return getMapData ( this , key ). get ( key );
}
/**
* Checks if a map value for `key` exists.
*
* @private
* @name has
* @memberOf MapCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function mapCacheHas ( key ) {
return getMapData ( this , key ). has ( key );
}
/**
* Sets the map `key` to `value`.
*
* @private
* @name set
* @memberOf MapCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the map cache instance.
*/
function mapCacheSet ( key , value ) {
getMapData ( this , key ). set ( key , value );
return this ;
}
// Add methods to `MapCache`.
MapCache . prototype . clear = mapCacheClear ;
MapCache . prototype [ 'delete' ] = mapCacheDelete ;
MapCache . prototype . get = mapCacheGet ;
MapCache . prototype . has = mapCacheHas ;
MapCache . prototype . set = mapCacheSet ;
/**
* Assigns `value` to `key` of `object` if the existing value is not equivalent
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* for equality comparisons.
*
* @private
* @param {Object} object The object to modify.
* @param {string} key The key of the property to assign.
* @param {*} value The value to assign.
*/
function assignValue ( object , key , value ) {
var objValue = object [ key ];
if ( ! ( hasOwnProperty . call ( object , key ) && eq ( objValue , value )) ||
( value === undefined && ! ( key in object ))) {
object [ key ] = value ;
}
}
/**
* Gets the index at which the `key` is found in `array` of key-value pairs.
*
* @private
* @param {Array} array The array to inspect.
* @param {*} key The key to search for.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function assocIndexOf ( array , key ) {
var length = array . length ;
while ( length -- ) {
if ( eq ( array [ length ][ 0 ], key )) {
return length ;
}
}
return - 1 ;
}
/**
* The base implementation of `_.isNative` without bad shim checks.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a native function,
* else `false`.
*/
function baseIsNative ( value ) {
if ( ! isObject ( value ) || isMasked ( value )) {
return false ;
}
var pattern = ( isFunction ( value ) || isHostObject ( value )) ? reIsNative : reIsHostCtor ;
return pattern . test ( toSource ( value ));
}
/**
* The base implementation of `_.set`.
*
* @private
* @param {Object} object The object to modify.
* @param {Array|string} path The path of the property to set.
* @param {*} value The value to set.
* @param {Function} [customizer] The function to customize path creation.
* @returns {Object} Returns `object`.
*/
function baseSet ( object , path , value , customizer ) {
if ( ! isObject ( object )) {
return object ;
}
path = isKey ( path , object ) ? [ path ] : castPath ( path );
var index = - 1 ,
length = path . length ,
lastIndex = length - 1 ,
nested = object ;
while ( nested != null && ++ index < length ) {
var key = toKey ( path [ index ]),
newValue = value ;
if ( index != lastIndex ) {
var objValue = nested [ key ];
newValue = customizer ? customizer ( objValue , key , nested ) : undefined ;
if ( newValue === undefined ) {
newValue = isObject ( objValue )
? objValue
: ( isIndex ( path [ index + 1 ]) ? [] : {});
}
}
assignValue ( nested , key , newValue );
nested = nested [ key ];
}
return object ;
}
/**
* The base implementation of `_.toString` which doesn't convert nullish
* values to empty strings.
*
* @private
* @param {*} value The value to process.
* @returns {string} Returns the string.
*/
function baseToString ( value ) {
// Exit early for strings to avoid a performance hit in some environments.
if ( typeof value == 'string' ) {
return value ;
}
if ( isSymbol ( value )) {
return symbolToString ? symbolToString . call ( value ) : '' ;
}
var result = ( value + '' );
return ( result == '0' && ( 1 / value ) == - INFINITY ) ? '-0' : result ;
}
/**
* Casts `value` to a path array if it's not one.
*
* @private
* @param {*} value The value to inspect.
* @returns {Array} Returns the cast property path array.
*/
function castPath ( value ) {
return isArray ( value ) ? value : stringToPath ( value );
}
/**
* Gets the data for `map`.
*
* @private
* @param {Object} map The map to query.
* @param {string} key The reference key.
* @returns {*} Returns the map data.
*/
function getMapData ( map , key ) {
var data = map . __data__ ;
return isKeyable ( key )
? data [ typeof key == 'string' ? 'string' : 'hash' ]
: data . map ;
}
/**
* Gets the native function at `key` of `object`.
*
* @private
* @param {Object} object The object to query.
* @param {string} key The key of the method to get.
* @returns {*} Returns the function if it's native, else `undefined`.
*/
function getNative ( object , key ) {
var value = getValue ( object , key );
return baseIsNative ( value ) ? value : undefined ;
}
/**
* Checks if `value` is a valid array-like index.
*
* @private
* @param {*} value The value to check.
* @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
* @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
*/
function isIndex ( value , length ) {
length = length == null ? MAX_SAFE_INTEGER : length ;
return !! length &&
( typeof value == 'number' || reIsUint . test ( value )) &&
( value > - 1 && value % 1 == 0 && value < length );
}
/**
* Checks if `value` is a property name and not a property path.
*
* @private
* @param {*} value The value to check.
* @param {Object} [object] The object to query keys on.
* @returns {boolean} Returns `true` if `value` is a property name, else `false`.
*/
function isKey ( value , object ) {
if ( isArray ( value )) {
return false ;
}
var type = typeof value ;
if ( type == 'number' || type == 'symbol' || type == 'boolean' ||
value == null || isSymbol ( value )) {
return true ;
}
return reIsPlainProp . test ( value ) || ! reIsDeepProp . test ( value ) ||
( object != null && value in Object ( object ));
}
/**
* Checks if `value` is suitable for use as unique object key.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
*/
function isKeyable ( value ) {
var type = typeof value ;
return ( type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' )
? ( value !== '__proto__' )
: ( value === null );
}
/**
* Checks if `func` has its source masked.
*
* @private
* @param {Function} func The function to check.
* @returns {boolean} Returns `true` if `func` is masked, else `false`.
*/
function isMasked ( func ) {
return !! maskSrcKey && ( maskSrcKey in func );
}
/**
* Converts `string` to a property path array.
*
* @private
* @param {string} string The string to convert.
* @returns {Array} Returns the property path array.
*/
var stringToPath = memoize ( function ( string ) {
string = toString ( string );
var result = [];
if ( reLeadingDot . test ( string )) {
result . push ( '' );
}
string . replace ( rePropName , function ( match , number , quote , string ) {
result . push ( quote ? string . replace ( reEscapeChar , '$1' ) : ( number || match ));
});
return result ;
});
/**
* Converts `value` to a string key if it's not a string or symbol.
*
* @private
* @param {*} value The value to inspect.
* @returns {string|symbol} Returns the key.
*/
function toKey ( value ) {
if ( typeof value == 'string' || isSymbol ( value )) {
return value ;
}
var result = ( value + '' );
return ( result == '0' && ( 1 / value ) == - INFINITY ) ? '-0' : result ;
}
/**
* Converts `func` to its source code.
*
* @private
* @param {Function} func The function to process.
* @returns {string} Returns the source code.
*/
function toSource ( func ) {
if ( func != null ) {
try {
return funcToString . call ( func );
} catch ( e ) {}
try {
return ( func + '' );
} catch ( e ) {}
}
return '' ;
}
/**
* Creates a function that memoizes the result of `func`. If `resolver` is
* provided, it determines the cache key for storing the result based on the
* arguments provided to the memoized function. By default, the first argument
* provided to the memoized function is used as the map cache key. The `func`
* is invoked with the `this` binding of the memoized function.
*
* **Note:** The cache is exposed as the `cache` property on the memoized
* function. Its creation may be customized by replacing the `_.memoize.Cache`
* constructor with one whose instances implement the
* [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
* method interface of `delete`, `get`, `has`, and `set`.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Function
* @param {Function} func The function to have its output memoized.
* @param {Function} [resolver] The function to resolve the cache key.
* @returns {Function} Returns the new memoized function.
* @example
*
* var object = { 'a': 1, 'b': 2 };
* var other = { 'c': 3, 'd': 4 };
*
* var values = _.memoize(_.values);
* values(object);
* // => [1, 2]
*
* values(other);
* // => [3, 4]
*
* object.a = 2;
* values(object);
* // => [1, 2]
*
* // Modify the result cache.
* values.cache.set(object, ['a', 'b']);
* values(object);
* // => ['a', 'b']
*
* // Replace `_.memoize.Cache`.
* _.memoize.Cache = WeakMap;
*/
function memoize ( func , resolver ) {
if ( typeof func != 'function' || ( resolver && typeof resolver != 'function' )) {
throw new TypeError ( FUNC_ERROR_TEXT );
}
var memoized = function () {
var args = arguments ,
key = resolver ? resolver . apply ( this , args ) : args [ 0 ],
cache = memoized . cache ;
if ( cache . has ( key )) {
return cache . get ( key );
}
var result = func . apply ( this , args );
memoized . cache = cache . set ( key , result );
return result ;
};
memoized . cache = new ( memoize . Cache || MapCache );
return memoized ;
}
// Assign cache to `_.memoize`.
memoize . Cache = MapCache ;
/**
* Performs a
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* comparison between two values to determine if they are equivalent.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
* @example
*
* var object = { 'a': 1 };
* var other = { 'a': 1 };
*
* _.eq(object, object);
* // => true
*
* _.eq(object, other);
* // => false
*
* _.eq('a', 'a');
* // => true
*
* _.eq('a', Object('a'));
* // => false
*
* _.eq(NaN, NaN);
* // => true
*/
function eq ( value , other ) {
return value === other || ( value !== value && other !== other );
}
/**
* Checks if `value` is classified as an `Array` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an array, else `false`.
* @example
*
* _.isArray([1, 2, 3]);
* // => true
*
* _.isArray(document.body.children);
* // => false
*
* _.isArray('abc');
* // => false
*
* _.isArray(_.noop);
* // => false
*/
var isArray = Array . isArray ;
/**
* Checks if `value` is classified as a `Function` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a function, else `false`.
* @example
*
* _.isFunction(_);
* // => true
*
* _.isFunction(/abc/);
* // => false
*/
function isFunction ( value ) {
// The use of `Object#toString` avoids issues with the `typeof` operator
// in Safari 8-9 which returns 'object' for typed array and other constructors.
var tag = isObject ( value ) ? objectToString . call ( value ) : '' ;
return tag == funcTag || tag == genTag ;
}
/**
* Checks if `value` is the
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an object, else `false`.
* @example
*
* _.isObject({});
* // => true
*
* _.isObject([1, 2, 3]);
* // => true
*
* _.isObject(_.noop);
* // => true
*
* _.isObject(null);
* // => false
*/
function isObject ( value ) {
var type = typeof value ;
return !! value && ( type == 'object' || type == 'function' );
}
/**
* Checks if `value` is object-like. A value is object-like if it's not `null`
* and has a `typeof` result of "object".
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
* @example
*
* _.isObjectLike({});
* // => true
*
* _.isObjectLike([1, 2, 3]);
* // => true
*
* _.isObjectLike(_.noop);
* // => false
*
* _.isObjectLike(null);
* // => false
*/
function isObjectLike ( value ) {
return !! value && typeof value == 'object' ;
}
/**
* Checks if `value` is classified as a `Symbol` primitive or object.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
* @example
*
* _.isSymbol(Symbol.iterator);
* // => true
*
* _.isSymbol('abc');
* // => false
*/
function isSymbol ( value ) {
return typeof value == 'symbol' ||
( isObjectLike ( value ) && objectToString . call ( value ) == symbolTag );
}
/**
* Converts `value` to a string. An empty string is returned for `null`
* and `undefined` values. The sign of `-0` is preserved.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to process.
* @returns {string} Returns the string.
* @example
*
* _.toString(null);
* // => ''
*
* _.toString(-0);
* // => '-0'
*
* _.toString([1, 2, 3]);
* // => '1,2,3'
*/
function toString ( value ) {
return value == null ? '' : baseToString ( value );
}
/**
* Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
* it's created. Arrays are created for missing index properties while objects
* are created for all other missing properties. Use `_.setWith` to customize
* `path` creation.
*
* **Note:** This method mutates `object`.
*
* @static
* @memberOf _
* @since 3.7.0
* @category Object
* @param {Object} object The object to modify.
* @param {Array|string} path The path of the property to set.
* @param {*} value The value to set.
* @returns {Object} Returns `object`.
* @example
*
* var object = { 'a': [{ 'b': { 'c': 3 } }] };
*
* _.set(object, 'a[0].b.c', 4);
* console.log(object.a[0].b.c);
* // => 4
*
* _.set(object, ['x', '0', 'y', 'z'], 5);
* console.log(object.x[0].y.z);
* // => 5
*/
function set ( object , path , value ) {
return object == null ? object : baseSet ( object , path , value );
}
module . exports = set ;
2019-12-09 16:54:42 -05:00
/***/ }),
/***/ 898 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
Object . defineProperty ( exports , '__esModule' , { value : true });
var request = __webpack_require__ ( 753 );
var universalUserAgent = __webpack_require__ ( 796 );
const VERSION = "4.3.1" ;
class GraphqlError extends Error {
constructor ( request , response ) {
const message = response . data . errors [ 0 ]. message ;
super ( message );
Object . assign ( this , response . data );
this . name = "GraphqlError" ;
this . request = request ; // Maintains proper stack trace (only available on V8)
/* istanbul ignore next */
if ( Error . captureStackTrace ) {
Error . captureStackTrace ( this , this . constructor );
}
}
}
const NON_VARIABLE_OPTIONS = [ "method" , "baseUrl" , "url" , "headers" , "request" , "query" ];
function graphql ( request , query , options ) {
options = typeof query === "string" ? options = Object . assign ({
query
}, options ) : options = query ;
const requestOptions = Object . keys ( options ). reduce (( result , key ) => {
if ( NON_VARIABLE_OPTIONS . includes ( key )) {
result [ key ] = options [ key ];
return result ;
}
if ( ! result . variables ) {
result . variables = {};
}
result . variables [ key ] = options [ key ];
return result ;
}, {});
return request ( requestOptions ). then ( response => {
if ( response . data . errors ) {
throw new GraphqlError ( requestOptions , {
data : response . data
});
}
return response . data . data ;
});
}
function withDefaults ( request$1 , newDefaults ) {
const newRequest = request$1 . defaults ( newDefaults );
const newApi = ( query , options ) => {
return graphql ( newRequest , query , options );
};
return Object . assign ( newApi , {
defaults : withDefaults . bind ( null , newRequest ),
endpoint : request . request . endpoint
});
}
const graphql$1 = withDefaults ( request . request , {
headers : {
"user-agent" : `octokit-graphql.js/ ${ VERSION } ${ universalUserAgent . getUserAgent () } `
},
method : "POST" ,
url : "/graphql"
});
function withCustomRequest ( customRequest ) {
return withDefaults ( customRequest , {
method : "POST" ,
url : "/graphql"
});
}
exports . graphql = graphql$1 ;
exports . withCustomRequest = withCustomRequest ;
//# sourceMappingURL=index.js.map
2019-12-03 10:28:59 -05:00
/***/ }),
/***/ 899 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = registerEndpoints ;
const { Deprecation } = __webpack_require__ ( 692 );
function registerEndpoints ( octokit , routes ) {
Object . keys ( routes ). forEach ( namespaceName => {
if ( ! octokit [ namespaceName ]) {
octokit [ namespaceName ] = {};
}
Object . keys ( routes [ namespaceName ]). forEach ( apiName => {
const apiOptions = routes [ namespaceName ][ apiName ];
const endpointDefaults = [ "method" , "url" , "headers" ]. reduce (
( map , key ) => {
if ( typeof apiOptions [ key ] !== "undefined" ) {
map [ key ] = apiOptions [ key ];
}
return map ;
},
{}
);
endpointDefaults . request = {
validate : apiOptions . params
};
let request = octokit . request . defaults ( endpointDefaults );
// patch request & endpoint methods to support deprecated parameters.
// Not the most elegant solution, but we don’t want to move deprecation
// logic into octokit/endpoint.js as it’s out of scope
const hasDeprecatedParam = Object . keys ( apiOptions . params || {}). find (
key => apiOptions . params [ key ]. deprecated
);
if ( hasDeprecatedParam ) {
const patch = patchForDeprecation . bind ( null , octokit , apiOptions );
request = patch (
octokit . request . defaults ( endpointDefaults ),
`. ${ namespaceName } . ${ apiName } ()`
);
request . endpoint = patch (
request . endpoint ,
`. ${ namespaceName } . ${ apiName } .endpoint()`
);
request . endpoint . merge = patch (
request . endpoint . merge ,
`. ${ namespaceName } . ${ apiName } .endpoint.merge()`
);
}
if ( apiOptions . deprecated ) {
octokit [ namespaceName ][ apiName ] = function deprecatedEndpointMethod () {
octokit . log . warn (
new Deprecation ( `[@octokit/rest] ${ apiOptions . deprecated } ` )
);
octokit [ namespaceName ][ apiName ] = request ;
return request . apply ( null , arguments );
};
return ;
}
octokit [ namespaceName ][ apiName ] = request ;
});
});
}
function patchForDeprecation ( octokit , apiOptions , method , methodName ) {
const patchedMethod = options => {
options = Object . assign ({}, options );
Object . keys ( options ). forEach ( key => {
if ( apiOptions . params [ key ] && apiOptions . params [ key ]. deprecated ) {
const aliasKey = apiOptions . params [ key ]. alias ;
octokit . log . warn (
new Deprecation (
`[@octokit/rest] " ${ key } " parameter is deprecated for " ${ methodName } ". Use " ${ aliasKey } " instead`
)
);
if ( ! ( aliasKey in options )) {
options [ aliasKey ] = options [ key ];
}
delete options [ key ];
}
});
return method ( options );
};
Object . keys ( method ). forEach ( key => {
patchedMethod [ key ] = method [ key ];
});
return patchedMethod ;
}
/***/ }),
/***/ 929 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = hasNextPage
const deprecate = __webpack_require__ ( 370 )
const getPageLinks = __webpack_require__ ( 577 )
function hasNextPage ( link ) {
deprecate ( `octokit.hasNextPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.` )
return getPageLinks ( link ). next
}
/***/ }),
/***/ 948 :
/***/ ( function ( module ) {
"use strict" ;
/**
* Tries to execute a function and discards any error that occurs.
* @param {Function} fn - Function that might or might not throw an error.
* @returns {?*} Return-value of the function when no error occurred.
*/
module . exports = function ( fn ) {
try { return fn () } catch ( e ) {}
}
/***/ }),
/***/ 954 :
/***/ ( function ( module ) {
module . exports = validateAuth ;
function validateAuth ( auth ) {
if ( typeof auth === "string" ) {
return ;
}
if ( typeof auth === "function" ) {
return ;
}
if ( auth . username && auth . password ) {
return ;
}
if ( auth . clientId && auth . clientSecret ) {
return ;
}
throw new Error ( `Invalid "auth" option: ${ JSON . stringify ( auth ) } ` );
}
/***/ }),
/***/ 955 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
const path = __webpack_require__ ( 622 );
const childProcess = __webpack_require__ ( 129 );
const crossSpawn = __webpack_require__ ( 20 );
const stripEof = __webpack_require__ ( 768 );
const npmRunPath = __webpack_require__ ( 621 );
const isStream = __webpack_require__ ( 323 );
const _getStream = __webpack_require__ ( 145 );
const pFinally = __webpack_require__ ( 697 );
const onExit = __webpack_require__ ( 260 );
const errname = __webpack_require__ ( 427 );
const stdio = __webpack_require__ ( 168 );
const TEN_MEGABYTES = 1000 * 1000 * 10 ;
function handleArgs ( cmd , args , opts ) {
let parsed ;
opts = Object . assign ({
extendEnv : true ,
env : {}
}, opts );
if ( opts . extendEnv ) {
opts . env = Object . assign ({}, process . env , opts . env );
}
if ( opts . __winShell === true ) {
delete opts . __winShell ;
parsed = {
command : cmd ,
args ,
options : opts ,
file : cmd ,
original : {
cmd ,
args
}
};
} else {
parsed = crossSpawn . _parse ( cmd , args , opts );
}
opts = Object . assign ({
maxBuffer : TEN_MEGABYTES ,
buffer : true ,
stripEof : true ,
preferLocal : true ,
localDir : parsed . options . cwd || process . cwd (),
encoding : 'utf8' ,
reject : true ,
cleanup : true
}, parsed . options );
opts . stdio = stdio ( opts );
if ( opts . preferLocal ) {
opts . env = npmRunPath . env ( Object . assign ({}, opts , { cwd : opts . localDir }));
}
if ( opts . detached ) {
// #115
opts . cleanup = false ;
}
if ( process . platform === 'win32' && path . basename ( parsed . command ) === 'cmd.exe' ) {
// #116
parsed . args . unshift ( '/q' );
}
return {
cmd : parsed . command ,
args : parsed . args ,
opts ,
parsed
};
}
function handleInput ( spawned , input ) {
if ( input === null || input === undefined ) {
return ;
}
if ( isStream ( input )) {
input . pipe ( spawned . stdin );
} else {
spawned . stdin . end ( input );
}
}
function handleOutput ( opts , val ) {
if ( val && opts . stripEof ) {
val = stripEof ( val );
}
return val ;
}
function handleShell ( fn , cmd , opts ) {
let file = '/bin/sh' ;
let args = [ '-c' , cmd ];
opts = Object . assign ({}, opts );
if ( process . platform === 'win32' ) {
opts . __winShell = true ;
file = process . env . comspec || 'cmd.exe' ;
args = [ '/s' , '/c' , `" ${ cmd } "` ];
opts . windowsVerbatimArguments = true ;
}
if ( opts . shell ) {
file = opts . shell ;
delete opts . shell ;
}
return fn ( file , args , opts );
}
function getStream ( process , stream , { encoding , buffer , maxBuffer }) {
if ( ! process [ stream ]) {
return null ;
}
let ret ;
if ( ! buffer ) {
// TODO: Use `ret = util.promisify(stream.finished)(process[stream]);` when targeting Node.js 10
ret = new Promise (( resolve , reject ) => {
process [ stream ]
. once ( 'end' , resolve )
. once ( 'error' , reject );
});
} else if ( encoding ) {
ret = _getStream ( process [ stream ], {
encoding ,
maxBuffer
});
} else {
ret = _getStream . buffer ( process [ stream ], { maxBuffer });
}
return ret . catch ( err => {
err . stream = stream ;
err . message = ` ${ stream } ${ err . message } ` ;
throw err ;
});
}
function makeError ( result , options ) {
const { stdout , stderr } = result ;
let err = result . error ;
const { code , signal } = result ;
const { parsed , joinedCmd } = options ;
const timedOut = options . timedOut || false ;
if ( ! err ) {
let output = '' ;
if ( Array . isArray ( parsed . opts . stdio )) {
if ( parsed . opts . stdio [ 2 ] !== 'inherit' ) {
output += output . length > 0 ? stderr : `\n ${ stderr } ` ;
}
if ( parsed . opts . stdio [ 1 ] !== 'inherit' ) {
output += `\n ${ stdout } ` ;
}
} else if ( parsed . opts . stdio !== 'inherit' ) {
output = `\n ${ stderr }${ stdout } ` ;
}
err = new Error ( `Command failed: ${ joinedCmd }${ output } ` );
err . code = code < 0 ? errname ( code ) : code ;
}
err . stdout = stdout ;
err . stderr = stderr ;
err . failed = true ;
err . signal = signal || null ;
err . cmd = joinedCmd ;
err . timedOut = timedOut ;
return err ;
}
function joinCmd ( cmd , args ) {
let joinedCmd = cmd ;
if ( Array . isArray ( args ) && args . length > 0 ) {
joinedCmd += ' ' + args . join ( ' ' );
}
return joinedCmd ;
}
module . exports = ( cmd , args , opts ) => {
const parsed = handleArgs ( cmd , args , opts );
const { encoding , buffer , maxBuffer } = parsed . opts ;
const joinedCmd = joinCmd ( cmd , args );
let spawned ;
try {
spawned = childProcess . spawn ( parsed . cmd , parsed . args , parsed . opts );
} catch ( err ) {
return Promise . reject ( err );
}
let removeExitHandler ;
if ( parsed . opts . cleanup ) {
removeExitHandler = onExit (() => {
spawned . kill ();
});
}
let timeoutId = null ;
let timedOut = false ;
const cleanup = () => {
if ( timeoutId ) {
clearTimeout ( timeoutId );
timeoutId = null ;
}
if ( removeExitHandler ) {
removeExitHandler ();
}
};
if ( parsed . opts . timeout > 0 ) {
timeoutId = setTimeout (() => {
timeoutId = null ;
timedOut = true ;
spawned . kill ( parsed . opts . killSignal );
}, parsed . opts . timeout );
}
const processDone = new Promise ( resolve => {
spawned . on ( 'exit' , ( code , signal ) => {
cleanup ();
resolve ({ code , signal });
});
spawned . on ( 'error' , err => {
cleanup ();
resolve ({ error : err });
});
if ( spawned . stdin ) {
spawned . stdin . on ( 'error' , err => {
cleanup ();
resolve ({ error : err });
});
}
});
function destroy () {
if ( spawned . stdout ) {
spawned . stdout . destroy ();
}
if ( spawned . stderr ) {
spawned . stderr . destroy ();
}
}
const handlePromise = () => pFinally ( Promise . all ([
processDone ,
getStream ( spawned , 'stdout' , { encoding , buffer , maxBuffer }),
getStream ( spawned , 'stderr' , { encoding , buffer , maxBuffer })
]). then ( arr => {
const result = arr [ 0 ];
result . stdout = arr [ 1 ];
result . stderr = arr [ 2 ];
if ( result . error || result . code !== 0 || result . signal !== null ) {
const err = makeError ( result , {
joinedCmd ,
parsed ,
timedOut
});
// TODO: missing some timeout logic for killed
// https://github.com/nodejs/node/blob/master/lib/child_process.js#L203
// err.killed = spawned.killed || killed;
err . killed = err . killed || spawned . killed ;
if ( ! parsed . opts . reject ) {
return err ;
}
throw err ;
}
return {
stdout : handleOutput ( parsed . opts , result . stdout ),
stderr : handleOutput ( parsed . opts , result . stderr ),
code : 0 ,
failed : false ,
killed : false ,
signal : null ,
cmd : joinedCmd ,
timedOut : false
};
}), destroy );
crossSpawn . _enoent . hookChildProcess ( spawned , parsed . parsed );
handleInput ( spawned , parsed . opts . input );
spawned . then = ( onfulfilled , onrejected ) => handlePromise (). then ( onfulfilled , onrejected );
spawned . catch = onrejected => handlePromise (). catch ( onrejected );
return spawned ;
};
// TODO: set `stderr: 'ignore'` when that option is implemented
module . exports . stdout = (... args ) => module . exports (... args ). then ( x => x . stdout );
// TODO: set `stdout: 'ignore'` when that option is implemented
module . exports . stderr = (... args ) => module . exports (... args ). then ( x => x . stderr );
module . exports . shell = ( cmd , opts ) => handleShell ( module . exports , cmd , opts );
module . exports . sync = ( cmd , args , opts ) => {
const parsed = handleArgs ( cmd , args , opts );
const joinedCmd = joinCmd ( cmd , args );
if ( isStream ( parsed . opts . input )) {
throw new TypeError ( 'The `input` option cannot be a stream in sync mode' );
}
const result = childProcess . spawnSync ( parsed . cmd , parsed . args , parsed . opts );
result . code = result . status ;
if ( result . error || result . status !== 0 || result . signal !== null ) {
const err = makeError ( result , {
joinedCmd ,
parsed
});
if ( ! parsed . opts . reject ) {
return err ;
}
throw err ;
}
return {
stdout : handleOutput ( parsed . opts , result . stdout ),
stderr : handleOutput ( parsed . opts , result . stderr ),
code : 0 ,
failed : false ,
signal : null ,
cmd : joinedCmd ,
timedOut : false
};
};
module . exports . shellSync = ( cmd , opts ) => handleShell ( module . exports . sync , cmd , opts );
/***/ }),
/***/ 966 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
"use strict" ;
const { PassThrough } = __webpack_require__ ( 413 );
module . exports = options => {
options = Object . assign ({}, options );
const { array } = options ;
let { encoding } = options ;
const buffer = encoding === 'buffer' ;
let objectMode = false ;
if ( array ) {
objectMode = ! ( encoding || buffer );
} else {
encoding = encoding || 'utf8' ;
}
if ( buffer ) {
encoding = null ;
}
let len = 0 ;
const ret = [];
const stream = new PassThrough ({ objectMode });
if ( encoding ) {
stream . setEncoding ( encoding );
}
stream . on ( 'data' , chunk => {
ret . push ( chunk );
if ( objectMode ) {
len = ret . length ;
} else {
len += chunk . length ;
}
});
stream . getBufferedValue = () => {
if ( array ) {
return ret ;
}
return buffer ? Buffer . concat ( ret , len ) : ret . join ( '' );
};
stream . getBufferedLength = () => len ;
return stream ;
};
/***/ }),
/***/ 969 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
var wrappy = __webpack_require__ ( 11 )
module . exports = wrappy ( once )
module . exports . strict = wrappy ( onceStrict )
once . proto = once ( function () {
Object . defineProperty ( Function . prototype , 'once' , {
value : function () {
return once ( this )
},
configurable : true
})
Object . defineProperty ( Function . prototype , 'onceStrict' , {
value : function () {
return onceStrict ( this )
},
configurable : true
})
})
function once ( fn ) {
var f = function () {
if ( f . called ) return f . value
f . called = true
return f . value = fn . apply ( this , arguments )
}
f . called = false
return f
}
function onceStrict ( fn ) {
var f = function () {
if ( f . called )
throw new Error ( f . onceError )
f . called = true
return f . value = fn . apply ( this , arguments )
}
var name = fn . name || 'Function wrapped with `once`'
f . onceError = name + " shouldn't be called more than once"
f . called = false
return f
}
/***/ }),
/***/ 986 :
/***/ ( function ( __unusedmodule , exports , __webpack_require__ ) {
"use strict" ;
var __awaiter = ( this && this . __awaiter ) || function ( thisArg , _arguments , P , generator ) {
function adopt ( value ) { return value instanceof P ? value : new P ( function ( resolve ) { resolve ( value ); }); }
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 ) : adopt ( result . value ). then ( fulfilled , rejected ); }
step (( generator = generator . apply ( thisArg , _arguments || [])). next ());
});
};
Object . defineProperty ( exports , "__esModule" , { value : true });
const tr = __webpack_require__ ( 9 );
/**
* 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
/***/ }),
/***/ 991 :
/***/ ( function ( module , __unusedexports , __webpack_require__ ) {
module . exports = authenticationRequestError ;
const { RequestError } = __webpack_require__ ( 463 );
function authenticationRequestError ( state , error , options ) {
if ( ! error . headers ) throw error ;
const otpRequired = /required/ . test ( error . headers [ "x-github-otp" ] || "" );
// handle "2FA required" error only
if ( error . status !== 401 || ! otpRequired ) {
throw error ;
}
if (
error . status === 401 &&
otpRequired &&
error . request &&
error . request . headers [ "x-github-otp" ]
) {
if ( state . otp ) {
delete state . otp ; // no longer valid, request again
} else {
throw new RequestError (
"Invalid one-time password for two-factor authentication" ,
401 ,
{
headers : error . headers ,
request : options
}
);
}
}
if ( typeof state . auth . on2fa !== "function" ) {
throw new RequestError (
"2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication" ,
401 ,
{
headers : error . headers ,
request : options
}
);
}
return Promise . resolve ()
. then (() => {
return state . auth . on2fa ();
})
. then ( oneTimePassword => {
const newOptions = Object . assign ( options , {
headers : Object . assign ( options . headers , {
"x-github-otp" : oneTimePassword
})
});
return state . octokit . request ( newOptions ). then ( response => {
// If OTP still valid, then persist it for following requests
state . otp = oneTimePassword ;
return response ;
});
});
}
/***/ })
/******/ });