2021-03-02 23:07:35 +00:00
/******/ ( ( ) => { // webpackBootstrap
/******/ var _ _webpack _modules _ _ = ( {
/***/ 7351 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) {
"use strict" ;
2021-05-25 09:56:10 +00:00
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
2021-03-02 23:07:35 +00:00
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
2021-05-25 09:56:10 +00:00
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
2021-03-02 23:07:35 +00:00
return result ;
} ;
Object . defineProperty ( exports , "__esModule" , ( { value : true } ) ) ;
2021-05-25 09:56:10 +00:00
exports . issue = exports . issueCommand = void 0 ;
2022-04-22 03:25:41 +00:00
const os = _ _importStar ( _ _nccwpck _require _ _ ( 2037 ) ) ;
2021-03-02 23:07:35 +00:00
const utils _1 = _ _nccwpck _require _ _ ( 5278 ) ;
/ * *
* Commands
*
* Command Format :
* : : name key = value , key = value : : message
*
* Examples :
* : : warning : : This is the message
* : : set - env name = MY _VAR : : some value
* /
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 += ' ' ;
let first = true ;
for ( const key in this . properties ) {
if ( this . properties . hasOwnProperty ( key ) ) {
const val = this . properties [ key ] ;
if ( val ) {
if ( first ) {
first = false ;
}
else {
cmdStr += ',' ;
}
cmdStr += ` ${ key } = ${ escapeProperty ( val ) } ` ;
}
}
}
}
cmdStr += ` ${ CMD _STRING } ${ escapeData ( this . message ) } ` ;
return cmdStr ;
}
}
function escapeData ( s ) {
return utils _1 . toCommandValue ( s )
. replace ( /%/g , '%25' )
. replace ( /\r/g , '%0D' )
. replace ( /\n/g , '%0A' ) ;
}
function escapeProperty ( s ) {
return utils _1 . toCommandValue ( s )
. replace ( /%/g , '%25' )
. replace ( /\r/g , '%0D' )
. replace ( /\n/g , '%0A' )
. replace ( /:/g , '%3A' )
. replace ( /,/g , '%2C' ) ;
}
//# sourceMappingURL=command.js.map
/***/ } ) ,
/***/ 2186 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) {
"use strict" ;
2021-05-25 09:56:10 +00:00
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
} ;
2021-03-02 23:07:35 +00:00
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 } ) ) ;
2022-04-22 03:25:41 +00:00
exports . getIDToken = exports . getState = exports . saveState = exports . group = exports . endGroup = exports . startGroup = exports . info = exports . notice = exports . warning = exports . error = exports . debug = exports . isDebug = exports . setFailed = exports . setCommandEcho = exports . setOutput = exports . getBooleanInput = exports . getMultilineInput = exports . getInput = exports . addPath = exports . setSecret = exports . exportVariable = exports . ExitCode = void 0 ;
2021-03-02 23:07:35 +00:00
const command _1 = _ _nccwpck _require _ _ ( 7351 ) ;
const file _command _1 = _ _nccwpck _require _ _ ( 717 ) ;
const utils _1 = _ _nccwpck _require _ _ ( 5278 ) ;
2022-04-22 03:25:41 +00:00
const os = _ _importStar ( _ _nccwpck _require _ _ ( 2037 ) ) ;
const path = _ _importStar ( _ _nccwpck _require _ _ ( 1017 ) ) ;
const oidc _utils _1 = _ _nccwpck _require _ _ ( 8041 ) ;
2021-03-02 23:07:35 +00:00
/ * *
* 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 . Non - string values will be converted to a string via JSON . stringify
* /
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function exportVariable ( name , val ) {
const convertedVal = utils _1 . toCommandValue ( val ) ;
process . env [ name ] = convertedVal ;
const filePath = process . env [ 'GITHUB_ENV' ] || '' ;
if ( filePath ) {
const delimiter = '_GitHubActionsFileCommandDelimeter_' ;
const commandValue = ` ${ name } << ${ delimiter } ${ os . EOL } ${ convertedVal } ${ os . EOL } ${ delimiter } ` ;
file _command _1 . issueCommand ( 'ENV' , commandValue ) ;
}
else {
command _1 . issueCommand ( 'set-env' , { name } , convertedVal ) ;
}
}
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 ) {
const filePath = process . env [ 'GITHUB_PATH' ] || '' ;
if ( filePath ) {
file _command _1 . issueCommand ( 'PATH' , inputPath ) ;
}
else {
command _1 . issueCommand ( 'add-path' , { } , inputPath ) ;
}
process . env [ 'PATH' ] = ` ${ inputPath } ${ path . delimiter } ${ process . env [ 'PATH' ] } ` ;
}
exports . addPath = addPath ;
/ * *
2021-05-25 09:56:10 +00:00
* Gets the value of an input .
* Unless trimWhitespace is set to false in InputOptions , the value is also trimmed .
* Returns an empty string if the value is not defined .
2021-03-02 23:07:35 +00:00
*
* @ 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 } ` ) ;
}
2021-05-25 09:56:10 +00:00
if ( options && options . trimWhitespace === false ) {
return val ;
}
2021-03-02 23:07:35 +00:00
return val . trim ( ) ;
}
exports . getInput = getInput ;
2021-07-17 16:06:29 +00:00
/ * *
* Gets the values of an multiline input . Each value is also trimmed .
*
* @ param name name of the input to get
* @ param options optional . See InputOptions .
* @ returns string [ ]
*
* /
function getMultilineInput ( name , options ) {
const inputs = getInput ( name , options )
. split ( '\n' )
. filter ( x => x !== '' ) ;
return inputs ;
}
exports . getMultilineInput = getMultilineInput ;
2021-05-25 09:56:10 +00:00
/ * *
* Gets the input value of the boolean type in the YAML 1.2 "core schema" specification .
* Support boolean input list : ` true | True | TRUE | false | False | FALSE ` .
* The return value is also in boolean type .
* ref : https : //yaml.org/spec/1.2/spec.html#id2804923
*
* @ param name name of the input to get
* @ param options optional . See InputOptions .
* @ returns boolean
* /
function getBooleanInput ( name , options ) {
const trueValue = [ 'true' , 'True' , 'TRUE' ] ;
const falseValue = [ 'false' , 'False' , 'FALSE' ] ;
const val = getInput ( name , options ) ;
if ( trueValue . includes ( val ) )
return true ;
if ( falseValue . includes ( val ) )
return false ;
throw new TypeError ( ` Input does not meet YAML 1.2 "Core Schema" specification: ${ name } \n ` +
` Support boolean input list: \` true | True | TRUE | false | False | FALSE \` ` ) ;
}
exports . getBooleanInput = getBooleanInput ;
2021-03-02 23:07:35 +00:00
/ * *
* Sets the value of an output .
*
* @ param name name of the output to set
* @ param value value to store . Non - string values will be converted to a string via JSON . stringify
* /
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function setOutput ( name , value ) {
2021-05-25 09:56:10 +00:00
process . stdout . write ( os . EOL ) ;
2021-03-02 23:07:35 +00:00
command _1 . issueCommand ( 'set-output' , { name } , value ) ;
}
exports . setOutput = setOutput ;
/ * *
* Enables or disables the echoing of commands into stdout for the rest of the step .
* Echoing is disabled by default if ACTIONS _STEP _DEBUG is not set .
*
* /
function setCommandEcho ( enabled ) {
command _1 . issue ( 'echo' , enabled ? 'on' : 'off' ) ;
}
exports . setCommandEcho = setCommandEcho ;
//-----------------------------------------------------------------------
// 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
//-----------------------------------------------------------------------
/ * *
* Gets whether Actions Step Debug is on or not
* /
function isDebug ( ) {
return process . env [ 'RUNNER_DEBUG' ] === '1' ;
}
exports . isDebug = isDebug ;
/ * *
* 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 . Errors will be converted to string via toString ( )
2022-04-22 03:25:41 +00:00
* @ param properties optional properties to add to the annotation .
2021-03-02 23:07:35 +00:00
* /
2022-04-22 03:25:41 +00:00
function error ( message , properties = { } ) {
command _1 . issueCommand ( 'error' , utils _1 . toCommandProperties ( properties ) , message instanceof Error ? message . toString ( ) : message ) ;
2021-03-02 23:07:35 +00:00
}
exports . error = error ;
/ * *
2022-04-22 03:25:41 +00:00
* Adds a warning issue
2021-03-02 23:07:35 +00:00
* @ param message warning issue message . Errors will be converted to string via toString ( )
2022-04-22 03:25:41 +00:00
* @ param properties optional properties to add to the annotation .
2021-03-02 23:07:35 +00:00
* /
2022-04-22 03:25:41 +00:00
function warning ( message , properties = { } ) {
command _1 . issueCommand ( 'warning' , utils _1 . toCommandProperties ( properties ) , message instanceof Error ? message . toString ( ) : message ) ;
2021-03-02 23:07:35 +00:00
}
exports . warning = warning ;
2022-04-22 03:25:41 +00:00
/ * *
* Adds a notice issue
* @ param message notice issue message . Errors will be converted to string via toString ( )
* @ param properties optional properties to add to the annotation .
* /
function notice ( message , properties = { } ) {
command _1 . issueCommand ( 'notice' , utils _1 . toCommandProperties ( properties ) , message instanceof Error ? message . toString ( ) : message ) ;
}
exports . notice = notice ;
2021-03-02 23:07:35 +00:00
/ * *
* 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 ;
//-----------------------------------------------------------------------
// Wrapper action state
//-----------------------------------------------------------------------
/ * *
* Saves state for current action , the state can only be retrieved by this action ' s post job execution .
*
* @ param name name of the state to store
* @ param value value to store . Non - string values will be converted to a string via JSON . stringify
* /
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function saveState ( name , value ) {
command _1 . issueCommand ( 'save-state' , { name } , value ) ;
}
exports . saveState = saveState ;
/ * *
* Gets the value of an state set by this action ' s main execution .
*
* @ param name name of the state to get
* @ returns string
* /
function getState ( name ) {
return process . env [ ` STATE_ ${ name } ` ] || '' ;
}
exports . getState = getState ;
2022-04-22 03:25:41 +00:00
function getIDToken ( aud ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return yield oidc _utils _1 . OidcClient . getIDToken ( aud ) ;
} ) ;
}
exports . getIDToken = getIDToken ;
2022-08-03 13:09:19 +00:00
/ * *
* Summary exports
* /
var summary _1 = _ _nccwpck _require _ _ ( 1327 ) ;
Object . defineProperty ( exports , "summary" , ( { enumerable : true , get : function ( ) { return summary _1 . summary ; } } ) ) ;
/ * *
* @ deprecated use core . summary
* /
var summary _2 = _ _nccwpck _require _ _ ( 1327 ) ;
Object . defineProperty ( exports , "markdownSummary" , ( { enumerable : true , get : function ( ) { return summary _2 . markdownSummary ; } } ) ) ;
/ * *
* Path exports
* /
var path _utils _1 = _ _nccwpck _require _ _ ( 2981 ) ;
Object . defineProperty ( exports , "toPosixPath" , ( { enumerable : true , get : function ( ) { return path _utils _1 . toPosixPath ; } } ) ) ;
Object . defineProperty ( exports , "toWin32Path" , ( { enumerable : true , get : function ( ) { return path _utils _1 . toWin32Path ; } } ) ) ;
Object . defineProperty ( exports , "toPlatformPath" , ( { enumerable : true , get : function ( ) { return path _utils _1 . toPlatformPath ; } } ) ) ;
2021-03-02 23:07:35 +00:00
//# sourceMappingURL=core.js.map
/***/ } ) ,
/***/ 717 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) {
"use strict" ;
// For internal use, subject to change.
2021-05-25 09:56:10 +00:00
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
2021-03-02 23:07:35 +00:00
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
2021-05-25 09:56:10 +00:00
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
2021-03-02 23:07:35 +00:00
return result ;
} ;
Object . defineProperty ( exports , "__esModule" , ( { value : true } ) ) ;
2021-05-25 09:56:10 +00:00
exports . issueCommand = void 0 ;
2021-03-02 23:07:35 +00:00
// We use any as a valid input type
/* eslint-disable @typescript-eslint/no-explicit-any */
2022-04-22 03:25:41 +00:00
const fs = _ _importStar ( _ _nccwpck _require _ _ ( 7147 ) ) ;
const os = _ _importStar ( _ _nccwpck _require _ _ ( 2037 ) ) ;
2021-03-02 23:07:35 +00:00
const utils _1 = _ _nccwpck _require _ _ ( 5278 ) ;
function issueCommand ( command , message ) {
const filePath = process . env [ ` GITHUB_ ${ command } ` ] ;
if ( ! filePath ) {
throw new Error ( ` Unable to find environment variable for file command ${ command } ` ) ;
}
if ( ! fs . existsSync ( filePath ) ) {
throw new Error ( ` Missing file at path: ${ filePath } ` ) ;
}
fs . appendFileSync ( filePath , ` ${ utils _1 . toCommandValue ( message ) } ${ os . EOL } ` , {
encoding : 'utf8'
} ) ;
}
exports . issueCommand = issueCommand ;
//# sourceMappingURL=file-command.js.map
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 8041 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _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 } ) ) ;
exports . OidcClient = void 0 ;
2022-08-03 13:09:19 +00:00
const http _client _1 = _ _nccwpck _require _ _ ( 6255 ) ;
const auth _1 = _ _nccwpck _require _ _ ( 5526 ) ;
2022-04-22 03:25:41 +00:00
const core _1 = _ _nccwpck _require _ _ ( 2186 ) ;
class OidcClient {
static createHttpClient ( allowRetry = true , maxRetry = 10 ) {
const requestOptions = {
allowRetries : allowRetry ,
maxRetries : maxRetry
} ;
return new http _client _1 . HttpClient ( 'actions/oidc-client' , [ new auth _1 . BearerCredentialHandler ( OidcClient . getRequestToken ( ) ) ] , requestOptions ) ;
}
static getRequestToken ( ) {
const token = process . env [ 'ACTIONS_ID_TOKEN_REQUEST_TOKEN' ] ;
if ( ! token ) {
throw new Error ( 'Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable' ) ;
}
return token ;
}
static getIDTokenUrl ( ) {
const runtimeUrl = process . env [ 'ACTIONS_ID_TOKEN_REQUEST_URL' ] ;
if ( ! runtimeUrl ) {
throw new Error ( 'Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable' ) ;
}
return runtimeUrl ;
}
static getCall ( id _token _url ) {
var _a ;
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
const httpclient = OidcClient . createHttpClient ( ) ;
const res = yield httpclient
. getJson ( id _token _url )
. catch ( error => {
throw new Error ( ` Failed to get ID Token. \n
Error Code : $ { error . statusCode } \ n
Error Message : $ { error . result . message } ` );
} ) ;
const id _token = ( _a = res . result ) === null || _a === void 0 ? void 0 : _a . value ;
if ( ! id _token ) {
throw new Error ( 'Response json body do not have ID Token field' ) ;
}
return id _token ;
} ) ;
}
static getIDToken ( audience ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
try {
// New ID Token is requested from action service
let id _token _url = OidcClient . getIDTokenUrl ( ) ;
if ( audience ) {
const encodedAudience = encodeURIComponent ( audience ) ;
id _token _url = ` ${ id _token _url } &audience= ${ encodedAudience } ` ;
}
core _1 . debug ( ` ID token url is ${ id _token _url } ` ) ;
const id _token = yield OidcClient . getCall ( id _token _url ) ;
core _1 . setSecret ( id _token ) ;
return id _token ;
}
catch ( error ) {
throw new Error ( ` Error message: ${ error . message } ` ) ;
}
} ) ;
}
}
exports . OidcClient = OidcClient ;
//# sourceMappingURL=oidc-utils.js.map
/***/ } ) ,
2022-08-03 13:09:19 +00:00
/***/ 2981 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) {
"use strict" ;
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
} ;
Object . defineProperty ( exports , "__esModule" , ( { value : true } ) ) ;
exports . toPlatformPath = exports . toWin32Path = exports . toPosixPath = void 0 ;
const path = _ _importStar ( _ _nccwpck _require _ _ ( 1017 ) ) ;
/ * *
* toPosixPath converts the given path to the posix form . On Windows , \ \ will be
* replaced with / .
*
* @ param pth . Path to transform .
* @ return string Posix path .
* /
function toPosixPath ( pth ) {
return pth . replace ( /[\\]/g , '/' ) ;
}
exports . toPosixPath = toPosixPath ;
/ * *
* toWin32Path converts the given path to the win32 form . On Linux , / w i l l b e
* replaced with \ \ .
*
* @ param pth . Path to transform .
* @ return string Win32 path .
* /
function toWin32Path ( pth ) {
return pth . replace ( /[/]/g , '\\' ) ;
}
exports . toWin32Path = toWin32Path ;
/ * *
* toPlatformPath converts the given path to a platform - specific path . It does
* this by replacing instances of / a n d \ w i t h t h e p l a t f o r m - s p e c i f i c p a t h
* separator .
*
* @ param pth The path to platformize .
* @ return string The platform - specific path .
* /
function toPlatformPath ( pth ) {
return pth . replace ( /[/\\]/g , path . sep ) ;
}
exports . toPlatformPath = toPlatformPath ;
//# sourceMappingURL=path-utils.js.map
/***/ } ) ,
/***/ 1327 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _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 } ) ) ;
exports . summary = exports . markdownSummary = exports . SUMMARY _DOCS _URL = exports . SUMMARY _ENV _VAR = void 0 ;
const os _1 = _ _nccwpck _require _ _ ( 2037 ) ;
const fs _1 = _ _nccwpck _require _ _ ( 7147 ) ;
const { access , appendFile , writeFile } = fs _1 . promises ;
exports . SUMMARY _ENV _VAR = 'GITHUB_STEP_SUMMARY' ;
exports . SUMMARY _DOCS _URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary' ;
class Summary {
constructor ( ) {
this . _buffer = '' ;
}
/ * *
* Finds the summary file path from the environment , rejects if env var is not found or file does not exist
* Also checks r / w permissions .
*
* @ returns step summary file path
* /
filePath ( ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
if ( this . _filePath ) {
return this . _filePath ;
}
const pathFromEnv = process . env [ exports . SUMMARY _ENV _VAR ] ;
if ( ! pathFromEnv ) {
throw new Error ( ` Unable to find environment variable for $ ${ exports . SUMMARY _ENV _VAR } . Check if your runtime environment supports job summaries. ` ) ;
}
try {
yield access ( pathFromEnv , fs _1 . constants . R _OK | fs _1 . constants . W _OK ) ;
}
catch ( _a ) {
throw new Error ( ` Unable to access summary file: ' ${ pathFromEnv } '. Check if the file has correct read/write permissions. ` ) ;
}
this . _filePath = pathFromEnv ;
return this . _filePath ;
} ) ;
}
/ * *
* Wraps content in an HTML tag , adding any HTML attributes
*
* @ param { string } tag HTML tag to wrap
* @ param { string | null } content content within the tag
* @ param { [ attribute : string ] : string } attrs key - value list of HTML attributes to add
*
* @ returns { string } content wrapped in HTML element
* /
wrap ( tag , content , attrs = { } ) {
const htmlAttrs = Object . entries ( attrs )
. map ( ( [ key , value ] ) => ` ${ key } =" ${ value } " ` )
. join ( '' ) ;
if ( ! content ) {
return ` < ${ tag } ${ htmlAttrs } > ` ;
}
return ` < ${ tag } ${ htmlAttrs } > ${ content } </ ${ tag } > ` ;
}
/ * *
* Writes text in the buffer to the summary buffer file and empties buffer . Will append by default .
*
* @ param { SummaryWriteOptions } [ options ] ( optional ) options for write operation
*
* @ returns { Promise < Summary > } summary instance
* /
write ( options ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
const overwrite = ! ! ( options === null || options === void 0 ? void 0 : options . overwrite ) ;
const filePath = yield this . filePath ( ) ;
const writeFunc = overwrite ? writeFile : appendFile ;
yield writeFunc ( filePath , this . _buffer , { encoding : 'utf8' } ) ;
return this . emptyBuffer ( ) ;
} ) ;
}
/ * *
* Clears the summary buffer and wipes the summary file
*
* @ returns { Summary } summary instance
* /
clear ( ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return this . emptyBuffer ( ) . write ( { overwrite : true } ) ;
} ) ;
}
/ * *
* Returns the current summary buffer as a string
*
* @ returns { string } string of summary buffer
* /
stringify ( ) {
return this . _buffer ;
}
/ * *
* If the summary buffer is empty
*
* @ returns { boolen } true if the buffer is empty
* /
isEmptyBuffer ( ) {
return this . _buffer . length === 0 ;
}
/ * *
* Resets the summary buffer without writing to summary file
*
* @ returns { Summary } summary instance
* /
emptyBuffer ( ) {
this . _buffer = '' ;
return this ;
}
/ * *
* Adds raw text to the summary buffer
*
* @ param { string } text content to add
* @ param { boolean } [ addEOL = false ] ( optional ) append an EOL to the raw text ( default : false )
*
* @ returns { Summary } summary instance
* /
addRaw ( text , addEOL = false ) {
this . _buffer += text ;
return addEOL ? this . addEOL ( ) : this ;
}
/ * *
* Adds the operating system - specific end - of - line marker to the buffer
*
* @ returns { Summary } summary instance
* /
addEOL ( ) {
return this . addRaw ( os _1 . EOL ) ;
}
/ * *
* Adds an HTML codeblock to the summary buffer
*
* @ param { string } code content to render within fenced code block
* @ param { string } lang ( optional ) language to syntax highlight code
*
* @ returns { Summary } summary instance
* /
addCodeBlock ( code , lang ) {
const attrs = Object . assign ( { } , ( lang && { lang } ) ) ;
const element = this . wrap ( 'pre' , this . wrap ( 'code' , code ) , attrs ) ;
return this . addRaw ( element ) . addEOL ( ) ;
}
/ * *
* Adds an HTML list to the summary buffer
*
* @ param { string [ ] } items list of items to render
* @ param { boolean } [ ordered = false ] ( optional ) if the rendered list should be ordered or not ( default : false )
*
* @ returns { Summary } summary instance
* /
addList ( items , ordered = false ) {
const tag = ordered ? 'ol' : 'ul' ;
const listItems = items . map ( item => this . wrap ( 'li' , item ) ) . join ( '' ) ;
const element = this . wrap ( tag , listItems ) ;
return this . addRaw ( element ) . addEOL ( ) ;
}
/ * *
* Adds an HTML table to the summary buffer
*
* @ param { SummaryTableCell [ ] } rows table rows
*
* @ returns { Summary } summary instance
* /
addTable ( rows ) {
const tableBody = rows
. map ( row => {
const cells = row
. map ( cell => {
if ( typeof cell === 'string' ) {
return this . wrap ( 'td' , cell ) ;
}
const { header , data , colspan , rowspan } = cell ;
const tag = header ? 'th' : 'td' ;
const attrs = Object . assign ( Object . assign ( { } , ( colspan && { colspan } ) ) , ( rowspan && { rowspan } ) ) ;
return this . wrap ( tag , data , attrs ) ;
} )
. join ( '' ) ;
return this . wrap ( 'tr' , cells ) ;
} )
. join ( '' ) ;
const element = this . wrap ( 'table' , tableBody ) ;
return this . addRaw ( element ) . addEOL ( ) ;
}
/ * *
* Adds a collapsable HTML details element to the summary buffer
*
* @ param { string } label text for the closed state
* @ param { string } content collapsable content
*
* @ returns { Summary } summary instance
* /
addDetails ( label , content ) {
const element = this . wrap ( 'details' , this . wrap ( 'summary' , label ) + content ) ;
return this . addRaw ( element ) . addEOL ( ) ;
}
/ * *
* Adds an HTML image tag to the summary buffer
*
* @ param { string } src path to the image you to embed
* @ param { string } alt text description of the image
* @ param { SummaryImageOptions } options ( optional ) addition image attributes
*
* @ returns { Summary } summary instance
* /
addImage ( src , alt , options ) {
const { width , height } = options || { } ;
const attrs = Object . assign ( Object . assign ( { } , ( width && { width } ) ) , ( height && { height } ) ) ;
const element = this . wrap ( 'img' , null , Object . assign ( { src , alt } , attrs ) ) ;
return this . addRaw ( element ) . addEOL ( ) ;
}
/ * *
* Adds an HTML section heading element
*
* @ param { string } text heading text
* @ param { number | string } [ level = 1 ] ( optional ) the heading level , default : 1
*
* @ returns { Summary } summary instance
* /
addHeading ( text , level ) {
const tag = ` h ${ level } ` ;
const allowedTag = [ 'h1' , 'h2' , 'h3' , 'h4' , 'h5' , 'h6' ] . includes ( tag )
? tag
: 'h1' ;
const element = this . wrap ( allowedTag , text ) ;
return this . addRaw ( element ) . addEOL ( ) ;
}
/ * *
* Adds an HTML thematic break ( < hr > ) to the summary buffer
*
* @ returns { Summary } summary instance
* /
addSeparator ( ) {
const element = this . wrap ( 'hr' , null ) ;
return this . addRaw ( element ) . addEOL ( ) ;
}
/ * *
* Adds an HTML line break ( < br > ) to the summary buffer
*
* @ returns { Summary } summary instance
* /
addBreak ( ) {
const element = this . wrap ( 'br' , null ) ;
return this . addRaw ( element ) . addEOL ( ) ;
}
/ * *
* Adds an HTML blockquote to the summary buffer
*
* @ param { string } text quote text
* @ param { string } cite ( optional ) citation url
*
* @ returns { Summary } summary instance
* /
addQuote ( text , cite ) {
const attrs = Object . assign ( { } , ( cite && { cite } ) ) ;
const element = this . wrap ( 'blockquote' , text , attrs ) ;
return this . addRaw ( element ) . addEOL ( ) ;
}
/ * *
* Adds an HTML anchor tag to the summary buffer
*
* @ param { string } text link text / content
* @ param { string } href hyperlink
*
* @ returns { Summary } summary instance
* /
addLink ( text , href ) {
const element = this . wrap ( 'a' , text , { href } ) ;
return this . addRaw ( element ) . addEOL ( ) ;
}
}
const _summary = new Summary ( ) ;
/ * *
* @ deprecated use ` core.summary `
* /
exports . markdownSummary = _summary ;
exports . summary = _summary ;
//# sourceMappingURL=summary.js.map
/***/ } ) ,
2021-03-02 23:07:35 +00:00
/***/ 5278 :
/***/ ( ( _ _unused _webpack _module , exports ) => {
"use strict" ;
// We use any as a valid input type
/* eslint-disable @typescript-eslint/no-explicit-any */
Object . defineProperty ( exports , "__esModule" , ( { value : true } ) ) ;
2022-04-22 03:25:41 +00:00
exports . toCommandProperties = exports . toCommandValue = void 0 ;
2021-03-02 23:07:35 +00:00
/ * *
* Sanitizes an input into a string so it can be passed into issueCommand safely
* @ param input input to sanitize into a string
* /
function toCommandValue ( input ) {
if ( input === null || input === undefined ) {
return '' ;
}
else if ( typeof input === 'string' || input instanceof String ) {
return input ;
}
return JSON . stringify ( input ) ;
}
exports . toCommandValue = toCommandValue ;
2022-04-22 03:25:41 +00:00
/ * *
*
* @ param annotationProperties
* @ returns The command properties to send with the actual annotation command
* See IssueCommandProperties : https : //github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646
* /
function toCommandProperties ( annotationProperties ) {
if ( ! Object . keys ( annotationProperties ) . length ) {
return { } ;
}
return {
title : annotationProperties . title ,
file : annotationProperties . file ,
line : annotationProperties . startLine ,
endLine : annotationProperties . endLine ,
col : annotationProperties . startColumn ,
endColumn : annotationProperties . endColumn
} ;
}
exports . toCommandProperties = toCommandProperties ;
2021-03-02 23:07:35 +00:00
//# sourceMappingURL=utils.js.map
/***/ } ) ,
/***/ 1514 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) {
"use strict" ;
2021-07-17 16:06:29 +00:00
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
} ;
2021-03-02 23:07:35 +00:00
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 } ) ) ;
2021-07-17 16:06:29 +00:00
exports . getExecOutput = exports . exec = void 0 ;
2022-04-22 03:25:41 +00:00
const string _decoder _1 = _ _nccwpck _require _ _ ( 1576 ) ;
2021-03-02 23:07:35 +00:00
const tr = _ _importStar ( _ _nccwpck _require _ _ ( 8159 ) ) ;
/ * *
* 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 ;
2021-07-17 16:06:29 +00:00
/ * *
* Exec a command and get the output .
* Output will be streamed to the live console .
* Returns promise with the exit code and collected stdout and stderr
*
* @ 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 < ExecOutput > exit code , stdout , and stderr
* /
function getExecOutput ( commandLine , args , options ) {
var _a , _b ;
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
let stdout = '' ;
let stderr = '' ;
//Using string decoder covers the case where a mult-byte character is split
const stdoutDecoder = new string _decoder _1 . StringDecoder ( 'utf8' ) ;
const stderrDecoder = new string _decoder _1 . StringDecoder ( 'utf8' ) ;
const originalStdoutListener = ( _a = options === null || options === void 0 ? void 0 : options . listeners ) === null || _a === void 0 ? void 0 : _a . stdout ;
const originalStdErrListener = ( _b = options === null || options === void 0 ? void 0 : options . listeners ) === null || _b === void 0 ? void 0 : _b . stderr ;
const stdErrListener = ( data ) => {
stderr += stderrDecoder . write ( data ) ;
if ( originalStdErrListener ) {
originalStdErrListener ( data ) ;
}
} ;
const stdOutListener = ( data ) => {
stdout += stdoutDecoder . write ( data ) ;
if ( originalStdoutListener ) {
originalStdoutListener ( data ) ;
}
} ;
const listeners = Object . assign ( Object . assign ( { } , options === null || options === void 0 ? void 0 : options . listeners ) , { stdout : stdOutListener , stderr : stdErrListener } ) ;
const exitCode = yield exec ( commandLine , args , Object . assign ( Object . assign ( { } , options ) , { listeners } ) ) ;
//flush any remaining characters
stdout += stdoutDecoder . end ( ) ;
stderr += stderrDecoder . end ( ) ;
return {
exitCode ,
stdout ,
stderr
} ;
} ) ;
}
exports . getExecOutput = getExecOutput ;
2021-03-02 23:07:35 +00:00
//# sourceMappingURL=exec.js.map
/***/ } ) ,
/***/ 8159 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) {
"use strict" ;
2021-07-17 16:06:29 +00:00
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
} ;
2021-03-02 23:07:35 +00:00
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 } ) ) ;
2021-07-17 16:06:29 +00:00
exports . argStringToArray = exports . ToolRunner = void 0 ;
2022-04-22 03:25:41 +00:00
const os = _ _importStar ( _ _nccwpck _require _ _ ( 2037 ) ) ;
const events = _ _importStar ( _ _nccwpck _require _ _ ( 2361 ) ) ;
const child = _ _importStar ( _ _nccwpck _require _ _ ( 2081 ) ) ;
const path = _ _importStar ( _ _nccwpck _require _ _ ( 1017 ) ) ;
2021-03-02 23:07:35 +00:00
const io = _ _importStar ( _ _nccwpck _require _ _ ( 7436 ) ) ;
const ioUtil = _ _importStar ( _ _nccwpck _require _ _ ( 1962 ) ) ;
2022-04-22 03:25:41 +00:00
const timers _1 = _ _nccwpck _require _ _ ( 9512 ) ;
2021-03-02 23:07:35 +00:00
/* 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 ) ;
}
2021-07-17 16:06:29 +00:00
return s ;
2021-03-02 23:07:35 +00:00
}
catch ( err ) {
// streaming lines to console is best effort. Don't fail a build.
this . _debug ( ` error processing line. Failed with error ${ err } ` ) ;
2021-07-17 16:06:29 +00:00
return '' ;
2021-03-02 23:07:35 +00:00
}
}
_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 * ( ) {
// root the tool path if it is unrooted and contains relative pathing
if ( ! ioUtil . isRooted ( this . toolPath ) &&
( this . toolPath . includes ( '/' ) ||
( IS _WINDOWS && this . toolPath . includes ( '\\' ) ) ) ) {
// prefer options.cwd if it is specified, however options.cwd may also need to be rooted
this . toolPath = path . resolve ( process . cwd ( ) , this . options . cwd || process . cwd ( ) , this . toolPath ) ;
}
// if the tool is only a file name, then resolve it from the PATH
// otherwise verify it exists (add extension on Windows if necessary)
this . toolPath = yield io . which ( this . toolPath , true ) ;
2021-07-17 16:06:29 +00:00
return new Promise ( ( resolve , reject ) => _ _awaiter ( this , void 0 , void 0 , function * ( ) {
2021-03-02 23:07:35 +00:00
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 ) ;
} ) ;
2021-07-17 16:06:29 +00:00
if ( this . options . cwd && ! ( yield ioUtil . exists ( this . options . cwd ) ) ) {
return reject ( new Error ( ` The cwd: ${ this . options . cwd } does not exist! ` ) ) ;
}
2021-03-02 23:07:35 +00:00
const fileName = this . _getSpawnFileName ( ) ;
const cp = child . spawn ( fileName , this . _getSpawnArgs ( optionsNonNull ) , this . _getSpawnOptions ( this . options , fileName ) ) ;
2021-07-17 16:06:29 +00:00
let stdbuffer = '' ;
2021-03-02 23:07:35 +00:00
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 ) ;
}
2021-07-17 16:06:29 +00:00
stdbuffer = this . _processLineBuffer ( data , stdbuffer , ( line ) => {
2021-03-02 23:07:35 +00:00
if ( this . options . listeners && this . options . listeners . stdline ) {
this . options . listeners . stdline ( line ) ;
}
} ) ;
} ) ;
}
2021-07-17 16:06:29 +00:00
let errbuffer = '' ;
2021-03-02 23:07:35 +00:00
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 ) ;
}
2021-07-17 16:06:29 +00:00
errbuffer = this . _processLineBuffer ( data , errbuffer , ( line ) => {
2021-03-02 23:07:35 +00:00
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 ) ;
}
} ) ;
if ( this . options . input ) {
if ( ! cp . stdin ) {
throw new Error ( 'child process missing stdin' ) ;
}
cp . stdin . end ( this . options . input ) ;
}
2021-07-17 16:06:29 +00:00
} ) ) ;
2021-03-02 23:07:35 +00:00
} ) ;
}
}
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 ) {
2021-07-17 16:06:29 +00:00
this . timeout = timers _1 . setTimeout ( ExecState . HandleTimeout , this . delay , this ) ;
2021-03-02 23:07:35 +00:00
}
}
_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
2022-04-22 03:25:41 +00:00
/***/ } ) ,
2022-08-03 13:09:19 +00:00
/***/ 5526 :
/***/ ( function ( _ _unused _webpack _module , exports ) {
2022-04-22 03:25:41 +00:00
"use strict" ;
2022-08-03 13:09:19 +00:00
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 ( ) ) ;
} ) ;
} ;
2022-04-22 03:25:41 +00:00
Object . defineProperty ( exports , "__esModule" , ( { value : true } ) ) ;
2022-08-03 13:09:19 +00:00
exports . PersonalAccessTokenCredentialHandler = exports . BearerCredentialHandler = exports . BasicCredentialHandler = void 0 ;
2022-04-22 03:25:41 +00:00
class BasicCredentialHandler {
constructor ( username , password ) {
this . username = username ;
this . password = password ;
}
prepareRequest ( options ) {
2022-08-03 13:09:19 +00:00
if ( ! options . headers ) {
throw Error ( 'The request has no headers' ) ;
}
options . headers [ 'Authorization' ] = ` Basic ${ Buffer . from ( ` ${ this . username } : ${ this . password } ` ) . toString ( 'base64' ) } ` ;
2022-04-22 03:25:41 +00:00
}
// This handler cannot handle 401
2022-08-03 13:09:19 +00:00
canHandleAuthentication ( ) {
2022-04-22 03:25:41 +00:00
return false ;
}
2022-08-03 13:09:19 +00:00
handleAuthentication ( ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
throw new Error ( 'not implemented' ) ;
} ) ;
2022-04-22 03:25:41 +00:00
}
}
exports . BasicCredentialHandler = BasicCredentialHandler ;
class BearerCredentialHandler {
constructor ( token ) {
this . token = token ;
}
// currently implements pre-authorization
// TODO: support preAuth = false where it hooks on 401
prepareRequest ( options ) {
2022-08-03 13:09:19 +00:00
if ( ! options . headers ) {
throw Error ( 'The request has no headers' ) ;
}
options . headers [ 'Authorization' ] = ` Bearer ${ this . token } ` ;
2022-04-22 03:25:41 +00:00
}
// This handler cannot handle 401
2022-08-03 13:09:19 +00:00
canHandleAuthentication ( ) {
2022-04-22 03:25:41 +00:00
return false ;
}
2022-08-03 13:09:19 +00:00
handleAuthentication ( ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
throw new Error ( 'not implemented' ) ;
} ) ;
2022-04-22 03:25:41 +00:00
}
}
exports . BearerCredentialHandler = BearerCredentialHandler ;
class PersonalAccessTokenCredentialHandler {
constructor ( token ) {
this . token = token ;
}
// currently implements pre-authorization
// TODO: support preAuth = false where it hooks on 401
prepareRequest ( options ) {
2022-08-03 13:09:19 +00:00
if ( ! options . headers ) {
throw Error ( 'The request has no headers' ) ;
}
options . headers [ 'Authorization' ] = ` Basic ${ Buffer . from ( ` PAT: ${ this . token } ` ) . toString ( 'base64' ) } ` ;
2022-04-22 03:25:41 +00:00
}
// This handler cannot handle 401
2022-08-03 13:09:19 +00:00
canHandleAuthentication ( ) {
2022-04-22 03:25:41 +00:00
return false ;
}
2022-08-03 13:09:19 +00:00
handleAuthentication ( ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
throw new Error ( 'not implemented' ) ;
} ) ;
2022-04-22 03:25:41 +00:00
}
}
exports . PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler ;
2022-08-03 13:09:19 +00:00
//# sourceMappingURL=auth.js.map
2022-04-22 03:25:41 +00:00
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-08-03 13:09:19 +00:00
/***/ 6255 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) {
2021-03-02 23:07:35 +00:00
"use strict" ;
2022-08-03 13:09:19 +00:00
/* eslint-disable @typescript-eslint/no-explicit-any */
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
} ;
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 ( ) ) ;
} ) ;
} ;
2021-03-02 23:07:35 +00:00
Object . defineProperty ( exports , "__esModule" , ( { value : true } ) ) ;
2022-08-03 13:09:19 +00:00
exports . HttpClient = exports . isHttps = exports . HttpClientResponse = exports . HttpClientError = exports . getProxyUrl = exports . MediaTypes = exports . Headers = exports . HttpCodes = void 0 ;
const http = _ _importStar ( _ _nccwpck _require _ _ ( 3685 ) ) ;
const https = _ _importStar ( _ _nccwpck _require _ _ ( 5687 ) ) ;
const pm = _ _importStar ( _ _nccwpck _require _ _ ( 9835 ) ) ;
const tunnel = _ _importStar ( _ _nccwpck _require _ _ ( 4294 ) ) ;
2021-03-02 23:07:35 +00:00
var HttpCodes ;
( function ( HttpCodes ) {
HttpCodes [ HttpCodes [ "OK" ] = 200 ] = "OK" ;
HttpCodes [ HttpCodes [ "MultipleChoices" ] = 300 ] = "MultipleChoices" ;
HttpCodes [ HttpCodes [ "MovedPermanently" ] = 301 ] = "MovedPermanently" ;
HttpCodes [ HttpCodes [ "ResourceMoved" ] = 302 ] = "ResourceMoved" ;
HttpCodes [ HttpCodes [ "SeeOther" ] = 303 ] = "SeeOther" ;
HttpCodes [ HttpCodes [ "NotModified" ] = 304 ] = "NotModified" ;
HttpCodes [ HttpCodes [ "UseProxy" ] = 305 ] = "UseProxy" ;
HttpCodes [ HttpCodes [ "SwitchProxy" ] = 306 ] = "SwitchProxy" ;
HttpCodes [ HttpCodes [ "TemporaryRedirect" ] = 307 ] = "TemporaryRedirect" ;
HttpCodes [ HttpCodes [ "PermanentRedirect" ] = 308 ] = "PermanentRedirect" ;
HttpCodes [ HttpCodes [ "BadRequest" ] = 400 ] = "BadRequest" ;
HttpCodes [ HttpCodes [ "Unauthorized" ] = 401 ] = "Unauthorized" ;
HttpCodes [ HttpCodes [ "PaymentRequired" ] = 402 ] = "PaymentRequired" ;
HttpCodes [ HttpCodes [ "Forbidden" ] = 403 ] = "Forbidden" ;
HttpCodes [ HttpCodes [ "NotFound" ] = 404 ] = "NotFound" ;
HttpCodes [ HttpCodes [ "MethodNotAllowed" ] = 405 ] = "MethodNotAllowed" ;
HttpCodes [ HttpCodes [ "NotAcceptable" ] = 406 ] = "NotAcceptable" ;
HttpCodes [ HttpCodes [ "ProxyAuthenticationRequired" ] = 407 ] = "ProxyAuthenticationRequired" ;
HttpCodes [ HttpCodes [ "RequestTimeout" ] = 408 ] = "RequestTimeout" ;
HttpCodes [ HttpCodes [ "Conflict" ] = 409 ] = "Conflict" ;
HttpCodes [ HttpCodes [ "Gone" ] = 410 ] = "Gone" ;
HttpCodes [ HttpCodes [ "TooManyRequests" ] = 429 ] = "TooManyRequests" ;
HttpCodes [ HttpCodes [ "InternalServerError" ] = 500 ] = "InternalServerError" ;
HttpCodes [ HttpCodes [ "NotImplemented" ] = 501 ] = "NotImplemented" ;
HttpCodes [ HttpCodes [ "BadGateway" ] = 502 ] = "BadGateway" ;
HttpCodes [ HttpCodes [ "ServiceUnavailable" ] = 503 ] = "ServiceUnavailable" ;
HttpCodes [ HttpCodes [ "GatewayTimeout" ] = 504 ] = "GatewayTimeout" ;
} ) ( HttpCodes = exports . HttpCodes || ( exports . HttpCodes = { } ) ) ;
var Headers ;
( function ( Headers ) {
Headers [ "Accept" ] = "accept" ;
Headers [ "ContentType" ] = "content-type" ;
} ) ( Headers = exports . Headers || ( exports . Headers = { } ) ) ;
var MediaTypes ;
( function ( MediaTypes ) {
MediaTypes [ "ApplicationJson" ] = "application/json" ;
} ) ( MediaTypes = exports . MediaTypes || ( exports . MediaTypes = { } ) ) ;
/ * *
* Returns the proxy URL , depending upon the supplied url and proxy environment variables .
* @ param serverUrl The server URL where the request will be sent . For example , https : //api.github.com
* /
function getProxyUrl ( serverUrl ) {
2022-08-03 13:09:19 +00:00
const proxyUrl = pm . getProxyUrl ( new URL ( serverUrl ) ) ;
2021-03-02 23:07:35 +00:00
return proxyUrl ? proxyUrl . href : '' ;
}
exports . getProxyUrl = getProxyUrl ;
const HttpRedirectCodes = [
HttpCodes . MovedPermanently ,
HttpCodes . ResourceMoved ,
HttpCodes . SeeOther ,
HttpCodes . TemporaryRedirect ,
HttpCodes . PermanentRedirect
] ;
const HttpResponseRetryCodes = [
HttpCodes . BadGateway ,
HttpCodes . ServiceUnavailable ,
HttpCodes . GatewayTimeout
] ;
const RetryableHttpVerbs = [ 'OPTIONS' , 'GET' , 'DELETE' , 'HEAD' ] ;
const ExponentialBackoffCeiling = 10 ;
const ExponentialBackoffTimeSlice = 5 ;
class HttpClientError extends Error {
constructor ( message , statusCode ) {
super ( message ) ;
this . name = 'HttpClientError' ;
this . statusCode = statusCode ;
Object . setPrototypeOf ( this , HttpClientError . prototype ) ;
}
}
exports . HttpClientError = HttpClientError ;
class HttpClientResponse {
constructor ( message ) {
this . message = message ;
}
readBody ( ) {
2022-08-03 13:09:19 +00:00
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return new Promise ( ( resolve ) => _ _awaiter ( this , void 0 , void 0 , function * ( ) {
let output = Buffer . alloc ( 0 ) ;
this . message . on ( 'data' , ( chunk ) => {
output = Buffer . concat ( [ output , chunk ] ) ;
} ) ;
this . message . on ( 'end' , ( ) => {
resolve ( output . toString ( ) ) ;
} ) ;
} ) ) ;
2021-03-02 23:07:35 +00:00
} ) ;
}
}
exports . HttpClientResponse = HttpClientResponse ;
function isHttps ( requestUrl ) {
2022-08-03 13:09:19 +00:00
const parsedUrl = new URL ( requestUrl ) ;
2021-03-02 23:07:35 +00:00
return parsedUrl . protocol === 'https:' ;
}
exports . isHttps = isHttps ;
class HttpClient {
constructor ( userAgent , handlers , requestOptions ) {
this . _ignoreSslError = false ;
this . _allowRedirects = true ;
this . _allowRedirectDowngrade = false ;
this . _maxRedirects = 50 ;
this . _allowRetries = false ;
this . _maxRetries = 1 ;
this . _keepAlive = false ;
this . _disposed = false ;
this . userAgent = userAgent ;
this . handlers = handlers || [ ] ;
this . requestOptions = requestOptions ;
if ( requestOptions ) {
if ( requestOptions . ignoreSslError != null ) {
this . _ignoreSslError = requestOptions . ignoreSslError ;
}
this . _socketTimeout = requestOptions . socketTimeout ;
if ( requestOptions . allowRedirects != null ) {
this . _allowRedirects = requestOptions . allowRedirects ;
}
if ( requestOptions . allowRedirectDowngrade != null ) {
this . _allowRedirectDowngrade = requestOptions . allowRedirectDowngrade ;
}
if ( requestOptions . maxRedirects != null ) {
this . _maxRedirects = Math . max ( requestOptions . maxRedirects , 0 ) ;
}
if ( requestOptions . keepAlive != null ) {
this . _keepAlive = requestOptions . keepAlive ;
}
if ( requestOptions . allowRetries != null ) {
this . _allowRetries = requestOptions . allowRetries ;
}
if ( requestOptions . maxRetries != null ) {
this . _maxRetries = requestOptions . maxRetries ;
}
}
}
options ( requestUrl , additionalHeaders ) {
2022-08-03 13:09:19 +00:00
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return this . request ( 'OPTIONS' , requestUrl , null , additionalHeaders || { } ) ;
} ) ;
2021-03-02 23:07:35 +00:00
}
get ( requestUrl , additionalHeaders ) {
2022-08-03 13:09:19 +00:00
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return this . request ( 'GET' , requestUrl , null , additionalHeaders || { } ) ;
} ) ;
2021-03-02 23:07:35 +00:00
}
del ( requestUrl , additionalHeaders ) {
2022-08-03 13:09:19 +00:00
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return this . request ( 'DELETE' , requestUrl , null , additionalHeaders || { } ) ;
} ) ;
2021-03-02 23:07:35 +00:00
}
post ( requestUrl , data , additionalHeaders ) {
2022-08-03 13:09:19 +00:00
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return this . request ( 'POST' , requestUrl , data , additionalHeaders || { } ) ;
} ) ;
2021-03-02 23:07:35 +00:00
}
patch ( requestUrl , data , additionalHeaders ) {
2022-08-03 13:09:19 +00:00
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return this . request ( 'PATCH' , requestUrl , data , additionalHeaders || { } ) ;
} ) ;
2021-03-02 23:07:35 +00:00
}
put ( requestUrl , data , additionalHeaders ) {
2022-08-03 13:09:19 +00:00
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return this . request ( 'PUT' , requestUrl , data , additionalHeaders || { } ) ;
} ) ;
2021-03-02 23:07:35 +00:00
}
head ( requestUrl , additionalHeaders ) {
2022-08-03 13:09:19 +00:00
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return this . request ( 'HEAD' , requestUrl , null , additionalHeaders || { } ) ;
} ) ;
2021-03-02 23:07:35 +00:00
}
sendStream ( verb , requestUrl , stream , additionalHeaders ) {
2022-08-03 13:09:19 +00:00
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return this . request ( verb , requestUrl , stream , additionalHeaders ) ;
} ) ;
2021-03-02 23:07:35 +00:00
}
/ * *
* Gets a typed object from an endpoint
* Be aware that not found returns a null . Other errors ( 4 xx , 5 xx ) reject the promise
* /
2022-08-03 13:09:19 +00:00
getJson ( requestUrl , additionalHeaders = { } ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
additionalHeaders [ Headers . Accept ] = this . _getExistingOrDefaultHeader ( additionalHeaders , Headers . Accept , MediaTypes . ApplicationJson ) ;
const res = yield this . get ( requestUrl , additionalHeaders ) ;
return this . _processResponse ( res , this . requestOptions ) ;
} ) ;
}
postJson ( requestUrl , obj , additionalHeaders = { } ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
const data = JSON . stringify ( obj , null , 2 ) ;
additionalHeaders [ Headers . Accept ] = this . _getExistingOrDefaultHeader ( additionalHeaders , Headers . Accept , MediaTypes . ApplicationJson ) ;
additionalHeaders [ Headers . ContentType ] = this . _getExistingOrDefaultHeader ( additionalHeaders , Headers . ContentType , MediaTypes . ApplicationJson ) ;
const res = yield this . post ( requestUrl , data , additionalHeaders ) ;
return this . _processResponse ( res , this . requestOptions ) ;
} ) ;
}
putJson ( requestUrl , obj , additionalHeaders = { } ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
const data = JSON . stringify ( obj , null , 2 ) ;
additionalHeaders [ Headers . Accept ] = this . _getExistingOrDefaultHeader ( additionalHeaders , Headers . Accept , MediaTypes . ApplicationJson ) ;
additionalHeaders [ Headers . ContentType ] = this . _getExistingOrDefaultHeader ( additionalHeaders , Headers . ContentType , MediaTypes . ApplicationJson ) ;
const res = yield this . put ( requestUrl , data , additionalHeaders ) ;
return this . _processResponse ( res , this . requestOptions ) ;
} ) ;
}
patchJson ( requestUrl , obj , additionalHeaders = { } ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
const data = JSON . stringify ( obj , null , 2 ) ;
additionalHeaders [ Headers . Accept ] = this . _getExistingOrDefaultHeader ( additionalHeaders , Headers . Accept , MediaTypes . ApplicationJson ) ;
additionalHeaders [ Headers . ContentType ] = this . _getExistingOrDefaultHeader ( additionalHeaders , Headers . ContentType , MediaTypes . ApplicationJson ) ;
const res = yield this . patch ( requestUrl , data , additionalHeaders ) ;
return this . _processResponse ( res , this . requestOptions ) ;
} ) ;
2021-03-02 23:07:35 +00:00
}
/ * *
* Makes a raw http request .
* All other methods such as get , post , patch , and request ultimately call this .
* Prefer get , del , post and patch
* /
2022-08-03 13:09:19 +00:00
request ( verb , requestUrl , data , headers ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
if ( this . _disposed ) {
throw new Error ( 'Client has already been disposed.' ) ;
}
const parsedUrl = new URL ( requestUrl ) ;
let info = this . _prepareRequest ( verb , parsedUrl , headers ) ;
// Only perform retries on reads since writes may not be idempotent.
const maxTries = this . _allowRetries && RetryableHttpVerbs . includes ( verb )
? this . _maxRetries + 1
: 1 ;
let numTries = 0 ;
let response ;
do {
response = yield this . requestRaw ( info , data ) ;
// Check if it's an authentication challenge
if ( response &&
response . message &&
response . message . statusCode === HttpCodes . Unauthorized ) {
let authenticationHandler ;
for ( const handler of this . handlers ) {
if ( handler . canHandleAuthentication ( response ) ) {
authenticationHandler = handler ;
break ;
}
}
if ( authenticationHandler ) {
return authenticationHandler . handleAuthentication ( this , info , data ) ;
}
else {
// We have received an unauthorized response but have no handlers to handle it.
// Let the response return to the caller.
return response ;
2021-03-02 23:07:35 +00:00
}
}
2022-08-03 13:09:19 +00:00
let redirectsRemaining = this . _maxRedirects ;
while ( response . message . statusCode &&
HttpRedirectCodes . includes ( response . message . statusCode ) &&
this . _allowRedirects &&
redirectsRemaining > 0 ) {
const redirectUrl = response . message . headers [ 'location' ] ;
if ( ! redirectUrl ) {
// if there's no location to redirect to, we won't
break ;
}
const parsedRedirectUrl = new URL ( redirectUrl ) ;
if ( parsedUrl . protocol === 'https:' &&
parsedUrl . protocol !== parsedRedirectUrl . protocol &&
! this . _allowRedirectDowngrade ) {
throw new Error ( 'Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.' ) ;
}
// we need to finish reading the response before reassigning response
// which will leak the open socket.
yield response . readBody ( ) ;
// strip authorization header if redirected to a different hostname
if ( parsedRedirectUrl . hostname !== parsedUrl . hostname ) {
for ( const header in headers ) {
// header names are case insensitive
if ( header . toLowerCase ( ) === 'authorization' ) {
delete headers [ header ] ;
}
}
}
// let's make the request with the new redirectUrl
info = this . _prepareRequest ( verb , parsedRedirectUrl , headers ) ;
response = yield this . requestRaw ( info , data ) ;
redirectsRemaining -- ;
2021-03-02 23:07:35 +00:00
}
2022-08-03 13:09:19 +00:00
if ( ! response . message . statusCode ||
! HttpResponseRetryCodes . includes ( response . message . statusCode ) ) {
// If not a retry code, return immediately instead of retrying
2021-03-02 23:07:35 +00:00
return response ;
}
2022-08-03 13:09:19 +00:00
numTries += 1 ;
if ( numTries < maxTries ) {
yield response . readBody ( ) ;
yield this . _performExponentialBackoff ( numTries ) ;
2021-03-02 23:07:35 +00:00
}
2022-08-03 13:09:19 +00:00
} while ( numTries < maxTries ) ;
return response ;
} ) ;
2021-03-02 23:07:35 +00:00
}
/ * *
* Needs to be called if keepAlive is set to true in request options .
* /
dispose ( ) {
if ( this . _agent ) {
this . _agent . destroy ( ) ;
}
this . _disposed = true ;
}
/ * *
* Raw request .
* @ param info
* @ param data
* /
requestRaw ( info , data ) {
2022-08-03 13:09:19 +00:00
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return new Promise ( ( resolve , reject ) => {
function callbackForResult ( err , res ) {
if ( err ) {
reject ( err ) ;
}
else if ( ! res ) {
// If `err` is not passed, then `res` must be passed.
reject ( new Error ( 'Unknown error' ) ) ;
}
else {
resolve ( res ) ;
}
2021-03-02 23:07:35 +00:00
}
2022-08-03 13:09:19 +00:00
this . requestRawWithCallback ( info , data , callbackForResult ) ;
} ) ;
2021-03-02 23:07:35 +00:00
} ) ;
}
/ * *
* Raw request with callback .
* @ param info
* @ param data
* @ param onResult
* /
requestRawWithCallback ( info , data , onResult ) {
if ( typeof data === 'string' ) {
2022-08-03 13:09:19 +00:00
if ( ! info . options . headers ) {
info . options . headers = { } ;
}
2021-03-02 23:07:35 +00:00
info . options . headers [ 'Content-Length' ] = Buffer . byteLength ( data , 'utf8' ) ;
}
let callbackCalled = false ;
2022-08-03 13:09:19 +00:00
function handleResult ( err , res ) {
2021-03-02 23:07:35 +00:00
if ( ! callbackCalled ) {
callbackCalled = true ;
onResult ( err , res ) ;
}
2022-08-03 13:09:19 +00:00
}
const req = info . httpModule . request ( info . options , ( msg ) => {
const res = new HttpClientResponse ( msg ) ;
handleResult ( undefined , res ) ;
2021-03-02 23:07:35 +00:00
} ) ;
2022-08-03 13:09:19 +00:00
let socket ;
2021-03-02 23:07:35 +00:00
req . on ( 'socket' , sock => {
socket = sock ;
} ) ;
// If we ever get disconnected, we want the socket to timeout eventually
req . setTimeout ( this . _socketTimeout || 3 * 60000 , ( ) => {
if ( socket ) {
socket . end ( ) ;
}
2022-08-03 13:09:19 +00:00
handleResult ( new Error ( ` Request timeout: ${ info . options . path } ` ) ) ;
2021-03-02 23:07:35 +00:00
} ) ;
req . on ( 'error' , function ( err ) {
// err has statusCode property
// res should have headers
2022-08-03 13:09:19 +00:00
handleResult ( err ) ;
2021-03-02 23:07:35 +00:00
} ) ;
if ( data && typeof data === 'string' ) {
req . write ( data , 'utf8' ) ;
}
if ( data && typeof data !== 'string' ) {
data . on ( 'close' , function ( ) {
req . end ( ) ;
} ) ;
data . pipe ( req ) ;
}
else {
req . end ( ) ;
}
}
/ * *
* Gets an http agent . This function is useful when you need an http agent that handles
* routing through a proxy server - depending upon the url and proxy environment variables .
* @ param serverUrl The server URL where the request will be sent . For example , https : //api.github.com
* /
getAgent ( serverUrl ) {
2022-08-03 13:09:19 +00:00
const parsedUrl = new URL ( serverUrl ) ;
2021-03-02 23:07:35 +00:00
return this . _getAgent ( parsedUrl ) ;
}
_prepareRequest ( method , requestUrl , headers ) {
const info = { } ;
info . parsedUrl = requestUrl ;
const usingSsl = info . parsedUrl . protocol === 'https:' ;
info . httpModule = usingSsl ? https : http ;
const defaultPort = usingSsl ? 443 : 80 ;
info . options = { } ;
info . options . host = info . parsedUrl . hostname ;
info . options . port = info . parsedUrl . port
? parseInt ( info . parsedUrl . port )
: defaultPort ;
info . options . path =
( info . parsedUrl . pathname || '' ) + ( info . parsedUrl . search || '' ) ;
info . options . method = method ;
info . options . headers = this . _mergeHeaders ( headers ) ;
if ( this . userAgent != null ) {
info . options . headers [ 'user-agent' ] = this . userAgent ;
}
info . options . agent = this . _getAgent ( info . parsedUrl ) ;
// gives handlers an opportunity to participate
if ( this . handlers ) {
2022-08-03 13:09:19 +00:00
for ( const handler of this . handlers ) {
2021-03-02 23:07:35 +00:00
handler . prepareRequest ( info . options ) ;
2022-08-03 13:09:19 +00:00
}
2021-03-02 23:07:35 +00:00
}
return info ;
}
_mergeHeaders ( headers ) {
if ( this . requestOptions && this . requestOptions . headers ) {
2022-08-03 13:09:19 +00:00
return Object . assign ( { } , lowercaseKeys ( this . requestOptions . headers ) , lowercaseKeys ( headers || { } ) ) ;
2021-03-02 23:07:35 +00:00
}
return lowercaseKeys ( headers || { } ) ;
}
_getExistingOrDefaultHeader ( additionalHeaders , header , _default ) {
let clientHeader ;
if ( this . requestOptions && this . requestOptions . headers ) {
clientHeader = lowercaseKeys ( this . requestOptions . headers ) [ header ] ;
}
return additionalHeaders [ header ] || clientHeader || _default ;
}
_getAgent ( parsedUrl ) {
let agent ;
2022-08-03 13:09:19 +00:00
const proxyUrl = pm . getProxyUrl ( parsedUrl ) ;
const useProxy = proxyUrl && proxyUrl . hostname ;
2021-03-02 23:07:35 +00:00
if ( this . _keepAlive && useProxy ) {
agent = this . _proxyAgent ;
}
if ( this . _keepAlive && ! useProxy ) {
agent = this . _agent ;
}
// if agent is already assigned use that agent.
2022-08-03 13:09:19 +00:00
if ( agent ) {
2021-03-02 23:07:35 +00:00
return agent ;
}
const usingSsl = parsedUrl . protocol === 'https:' ;
let maxSockets = 100 ;
2022-08-03 13:09:19 +00:00
if ( this . requestOptions ) {
2021-03-02 23:07:35 +00:00
maxSockets = this . requestOptions . maxSockets || http . globalAgent . maxSockets ;
}
2022-08-03 13:09:19 +00:00
// This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis.
if ( proxyUrl && proxyUrl . hostname ) {
2021-03-02 23:07:35 +00:00
const agentOptions = {
2022-08-03 13:09:19 +00:00
maxSockets ,
2021-03-02 23:07:35 +00:00
keepAlive : this . _keepAlive ,
2022-08-03 13:09:19 +00:00
proxy : Object . assign ( Object . assign ( { } , ( ( proxyUrl . username || proxyUrl . password ) && {
proxyAuth : ` ${ proxyUrl . username } : ${ proxyUrl . password } `
} ) ) , { host : proxyUrl . hostname , port : proxyUrl . port } )
2021-03-02 23:07:35 +00:00
} ;
let tunnelAgent ;
const overHttps = proxyUrl . protocol === 'https:' ;
if ( usingSsl ) {
tunnelAgent = overHttps ? tunnel . httpsOverHttps : tunnel . httpsOverHttp ;
}
else {
tunnelAgent = overHttps ? tunnel . httpOverHttps : tunnel . httpOverHttp ;
}
agent = tunnelAgent ( agentOptions ) ;
this . _proxyAgent = agent ;
}
// if reusing agent across request and tunneling agent isn't assigned create a new agent
if ( this . _keepAlive && ! agent ) {
2022-08-03 13:09:19 +00:00
const options = { keepAlive : this . _keepAlive , maxSockets } ;
2021-03-02 23:07:35 +00:00
agent = usingSsl ? new https . Agent ( options ) : new http . Agent ( options ) ;
this . _agent = agent ;
}
// if not using private agent and tunnel agent isn't setup then use global agent
if ( ! agent ) {
agent = usingSsl ? https . globalAgent : http . globalAgent ;
}
if ( usingSsl && this . _ignoreSslError ) {
// we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
// http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
// we have to cast it to any and change it directly
agent . options = Object . assign ( agent . options || { } , {
rejectUnauthorized : false
} ) ;
}
return agent ;
}
_performExponentialBackoff ( retryNumber ) {
2022-08-03 13:09:19 +00:00
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
retryNumber = Math . min ( ExponentialBackoffCeiling , retryNumber ) ;
const ms = ExponentialBackoffTimeSlice * Math . pow ( 2 , retryNumber ) ;
return new Promise ( resolve => setTimeout ( ( ) => resolve ( ) , ms ) ) ;
} ) ;
}
_processResponse ( res , options ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return new Promise ( ( resolve , reject ) => _ _awaiter ( this , void 0 , void 0 , function * ( ) {
const statusCode = res . message . statusCode || 0 ;
const response = {
statusCode ,
result : null ,
headers : { }
} ;
// not found leads to null obj returned
if ( statusCode === HttpCodes . NotFound ) {
resolve ( response ) ;
}
// get the result from the body
function dateTimeDeserializer ( key , value ) {
if ( typeof value === 'string' ) {
const a = new Date ( value ) ;
if ( ! isNaN ( a . valueOf ( ) ) ) {
return a ;
}
2021-03-02 23:07:35 +00:00
}
2022-08-03 13:09:19 +00:00
return value ;
}
let obj ;
let contents ;
try {
contents = yield res . readBody ( ) ;
if ( contents && contents . length > 0 ) {
if ( options && options . deserializeDates ) {
obj = JSON . parse ( contents , dateTimeDeserializer ) ;
}
else {
obj = JSON . parse ( contents ) ;
}
response . result = obj ;
2021-03-02 23:07:35 +00:00
}
2022-08-03 13:09:19 +00:00
response . headers = res . message . headers ;
2021-03-02 23:07:35 +00:00
}
2022-08-03 13:09:19 +00:00
catch ( err ) {
// Invalid resource (contents not json); leaving result obj null
2021-03-02 23:07:35 +00:00
}
2022-08-03 13:09:19 +00:00
// note that 3xx redirects are handled by the http layer.
if ( statusCode > 299 ) {
let msg ;
// if exception/error in body, attempt to get better error
if ( obj && obj . message ) {
msg = obj . message ;
}
else if ( contents && contents . length > 0 ) {
// it may be the case that the exception is in the body message as string
msg = contents ;
}
else {
msg = ` Failed request: ( ${ statusCode } ) ` ;
}
const err = new HttpClientError ( msg , statusCode ) ;
err . result = response . result ;
reject ( err ) ;
2021-03-02 23:07:35 +00:00
}
else {
2022-08-03 13:09:19 +00:00
resolve ( response ) ;
2021-03-02 23:07:35 +00:00
}
2022-08-03 13:09:19 +00:00
} ) ) ;
2021-03-02 23:07:35 +00:00
} ) ;
}
}
exports . HttpClient = HttpClient ;
2022-08-03 13:09:19 +00:00
const lowercaseKeys = ( obj ) => Object . keys ( obj ) . reduce ( ( c , k ) => ( ( c [ k . toLowerCase ( ) ] = obj [ k ] ) , c ) , { } ) ;
//# sourceMappingURL=index.js.map
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-08-03 13:09:19 +00:00
/***/ 9835 :
2021-03-02 23:07:35 +00:00
/***/ ( ( _ _unused _webpack _module , exports ) => {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , ( { value : true } ) ) ;
2022-08-03 13:09:19 +00:00
exports . checkBypass = exports . getProxyUrl = void 0 ;
2021-03-02 23:07:35 +00:00
function getProxyUrl ( reqUrl ) {
2022-08-03 13:09:19 +00:00
const usingSsl = reqUrl . protocol === 'https:' ;
2021-03-02 23:07:35 +00:00
if ( checkBypass ( reqUrl ) ) {
2022-08-03 13:09:19 +00:00
return undefined ;
2021-03-02 23:07:35 +00:00
}
2022-08-03 13:09:19 +00:00
const proxyVar = ( ( ) => {
if ( usingSsl ) {
return process . env [ 'https_proxy' ] || process . env [ 'HTTPS_PROXY' ] ;
}
else {
return process . env [ 'http_proxy' ] || process . env [ 'HTTP_PROXY' ] ;
}
} ) ( ) ;
if ( proxyVar ) {
return new URL ( proxyVar ) ;
2021-03-02 23:07:35 +00:00
}
else {
2022-08-03 13:09:19 +00:00
return undefined ;
2021-03-02 23:07:35 +00:00
}
}
exports . getProxyUrl = getProxyUrl ;
function checkBypass ( reqUrl ) {
if ( ! reqUrl . hostname ) {
return false ;
}
2022-08-03 13:09:19 +00:00
const noProxy = process . env [ 'no_proxy' ] || process . env [ 'NO_PROXY' ] || '' ;
2021-03-02 23:07:35 +00:00
if ( ! noProxy ) {
return false ;
}
// Determine the request port
let reqPort ;
if ( reqUrl . port ) {
reqPort = Number ( reqUrl . port ) ;
}
else if ( reqUrl . protocol === 'http:' ) {
reqPort = 80 ;
}
else if ( reqUrl . protocol === 'https:' ) {
reqPort = 443 ;
}
// Format the request hostname and hostname with port
2022-08-03 13:09:19 +00:00
const upperReqHosts = [ reqUrl . hostname . toUpperCase ( ) ] ;
2021-03-02 23:07:35 +00:00
if ( typeof reqPort === 'number' ) {
upperReqHosts . push ( ` ${ upperReqHosts [ 0 ] } : ${ reqPort } ` ) ;
}
// Compare request host against noproxy
2022-08-03 13:09:19 +00:00
for ( const upperNoProxyItem of noProxy
2021-03-02 23:07:35 +00:00
. split ( ',' )
. map ( x => x . trim ( ) . toUpperCase ( ) )
. filter ( x => x ) ) {
if ( upperReqHosts . some ( x => x === upperNoProxyItem ) ) {
return true ;
}
}
return false ;
}
exports . checkBypass = checkBypass ;
2022-08-03 13:09:19 +00:00
//# sourceMappingURL=proxy.js.map
2021-03-02 23:07:35 +00:00
/***/ } ) ,
/***/ 1962 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) {
"use strict" ;
2021-07-17 16:06:29 +00:00
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
} ;
2021-03-02 23:07:35 +00:00
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 } ) ) ;
2021-07-17 16:06:29 +00:00
exports . getCmdPath = exports . tryGetExecutablePath = exports . isRooted = exports . isDirectory = exports . exists = exports . IS _WINDOWS = exports . unlink = exports . symlink = exports . stat = exports . rmdir = exports . rename = exports . readlink = exports . readdir = exports . mkdir = exports . lstat = exports . copyFile = exports . chmod = void 0 ;
2022-04-22 03:25:41 +00:00
const fs = _ _importStar ( _ _nccwpck _require _ _ ( 7147 ) ) ;
const path = _ _importStar ( _ _nccwpck _require _ _ ( 1017 ) ) ;
2021-03-02 23:07:35 +00:00
_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 ;
/ * *
* 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 ( ) ) ) ;
}
2021-07-17 16:06:29 +00:00
// Get the path of cmd.exe in windows
function getCmdPath ( ) {
var _a ;
return ( _a = process . env [ 'COMSPEC' ] ) !== null && _a !== void 0 ? _a : ` cmd.exe ` ;
}
exports . getCmdPath = getCmdPath ;
2021-03-02 23:07:35 +00:00
//# sourceMappingURL=io-util.js.map
/***/ } ) ,
/***/ 7436 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) {
"use strict" ;
2021-07-17 16:06:29 +00:00
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
} ;
2021-03-02 23:07:35 +00:00
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 } ) ) ;
2021-07-17 16:06:29 +00:00
exports . findInPath = exports . which = exports . mkdirP = exports . rmRF = exports . mv = exports . cp = void 0 ;
2022-04-22 03:25:41 +00:00
const assert _1 = _ _nccwpck _require _ _ ( 9491 ) ;
const childProcess = _ _importStar ( _ _nccwpck _require _ _ ( 2081 ) ) ;
const path = _ _importStar ( _ _nccwpck _require _ _ ( 1017 ) ) ;
const util _1 = _ _nccwpck _require _ _ ( 3837 ) ;
2021-07-17 16:06:29 +00:00
const ioUtil = _ _importStar ( _ _nccwpck _require _ _ ( 1962 ) ) ;
2021-03-02 23:07:35 +00:00
const exec = util _1 . promisify ( childProcess . exec ) ;
2021-07-17 16:06:29 +00:00
const execFile = util _1 . promisify ( childProcess . execFile ) ;
2021-03-02 23:07:35 +00:00
/ * *
* 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 * ( ) {
2021-07-17 16:06:29 +00:00
const { force , recursive , copySourceDirectory } = readCopyOptions ( options ) ;
2021-03-02 23:07:35 +00:00
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.
2021-07-17 16:06:29 +00:00
const newDest = destStat && destStat . isDirectory ( ) && copySourceDirectory
2021-03-02 23:07:35 +00:00
? 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.
2021-07-17 16:06:29 +00:00
// Check for invalid characters
// https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
if ( /[*"<>|]/ . test ( inputPath ) ) {
throw new Error ( 'File path must not contain `*`, `"`, `<`, `>` or `|` on Windows' ) ;
}
2021-03-02 23:07:35 +00:00
try {
2021-07-17 16:06:29 +00:00
const cmdPath = ioUtil . getCmdPath ( ) ;
2021-03-02 23:07:35 +00:00
if ( yield ioUtil . isDirectory ( inputPath , true ) ) {
2021-07-17 16:06:29 +00:00
yield exec ( ` ${ cmdPath } /s /c "rd /s /q "%inputPath%"" ` , {
env : { inputPath }
} ) ;
2021-03-02 23:07:35 +00:00
}
else {
2021-07-17 16:06:29 +00:00
yield exec ( ` ${ cmdPath } /s /c "del /f /a "%inputPath%"" ` , {
env : { inputPath }
} ) ;
2021-03-02 23:07:35 +00:00
}
}
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 ) {
2021-07-17 16:06:29 +00:00
yield execFile ( ` rm ` , [ ` -rf ` , ` ${ inputPath } ` ] ) ;
2021-03-02 23:07:35 +00:00
}
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 * ( ) {
2021-07-17 16:06:29 +00:00
assert _1 . ok ( fsPath , 'a path argument must be provided' ) ;
yield ioUtil . mkdir ( fsPath , { recursive : true } ) ;
2021-03-02 23:07:35 +00:00
} ) ;
}
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. ` ) ;
}
}
2021-07-17 16:06:29 +00:00
return result ;
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
const matches = yield findInPath ( tool ) ;
if ( matches && matches . length > 0 ) {
return matches [ 0 ] ;
}
return '' ;
} ) ;
}
exports . which = which ;
/ * *
* Returns a list of all occurrences of the given tool on the system path .
*
* @ returns Promise < string [ ] > the paths of the tool
* /
function findInPath ( tool ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
if ( ! tool ) {
throw new Error ( "parameter 'tool' is required" ) ;
}
// 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 ) ;
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
}
// 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 ] ;
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
return [ ] ;
}
// if any path separators, return empty
if ( tool . includes ( path . sep ) ) {
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 ) ;
2021-03-02 23:07:35 +00:00
}
}
}
2021-07-17 16:06:29 +00:00
// find all matches
const matches = [ ] ;
for ( const directory of directories ) {
const filePath = yield ioUtil . tryGetExecutablePath ( path . join ( directory , tool ) , extensions ) ;
if ( filePath ) {
matches . push ( filePath ) ;
}
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
return matches ;
2021-03-02 23:07:35 +00:00
} ) ;
}
2021-07-17 16:06:29 +00:00
exports . findInPath = findInPath ;
2021-03-02 23:07:35 +00:00
function readCopyOptions ( options ) {
const force = options . force == null ? true : options . force ;
const recursive = Boolean ( options . recursive ) ;
2021-07-17 16:06:29 +00:00
const copySourceDirectory = options . copySourceDirectory == null
? true
: Boolean ( options . copySourceDirectory ) ;
return { force , recursive , copySourceDirectory } ;
2021-03-02 23:07:35 +00:00
}
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
/***/ } ) ,
/***/ 2473 :
/***/ ( function ( module , exports , _ _nccwpck _require _ _ ) {
"use strict" ;
2021-07-17 16:06:29 +00:00
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
} ;
2021-03-02 23:07:35 +00:00
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 } ) ) ;
2021-07-17 16:06:29 +00:00
exports . _readLinuxVersionFile = exports . _getOsVersion = exports . _findMatch = void 0 ;
const semver = _ _importStar ( _ _nccwpck _require _ _ ( 5911 ) ) ;
2021-03-02 23:07:35 +00:00
const core _1 = _ _nccwpck _require _ _ ( 2186 ) ;
// needs to be require for core node modules to be mocked
/* eslint @typescript-eslint/no-require-imports: 0 */
2022-04-22 03:25:41 +00:00
const os = _ _nccwpck _require _ _ ( 2037 ) ;
const cp = _ _nccwpck _require _ _ ( 2081 ) ;
const fs = _ _nccwpck _require _ _ ( 7147 ) ;
2021-03-02 23:07:35 +00:00
function _findMatch ( versionSpec , stable , candidates , archFilter ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
const platFilter = os . platform ( ) ;
let result ;
let match ;
let file ;
for ( const candidate of candidates ) {
const version = candidate . version ;
core _1 . debug ( ` check ${ version } satisfies ${ versionSpec } ` ) ;
if ( semver . satisfies ( version , versionSpec ) &&
( ! stable || candidate . stable === stable ) ) {
file = candidate . files . find ( item => {
core _1 . debug ( ` ${ item . arch } === ${ archFilter } && ${ item . platform } === ${ platFilter } ` ) ;
let chk = item . arch === archFilter && item . platform === platFilter ;
if ( chk && item . platform _version ) {
const osVersion = module . exports . _getOsVersion ( ) ;
if ( osVersion === item . platform _version ) {
chk = true ;
}
else {
chk = semver . satisfies ( osVersion , item . platform _version ) ;
}
}
return chk ;
} ) ;
if ( file ) {
core _1 . debug ( ` matched ${ candidate . version } ` ) ;
match = candidate ;
break ;
}
}
}
if ( match && file ) {
// clone since we're mutating the file list to be only the file that matches
result = Object . assign ( { } , match ) ;
result . files = [ file ] ;
}
return result ;
} ) ;
}
exports . _findMatch = _findMatch ;
function _getOsVersion ( ) {
// TODO: add windows and other linux, arm variants
// right now filtering on version is only an ubuntu and macos scenario for tools we build for hosted (python)
const plat = os . platform ( ) ;
let version = '' ;
if ( plat === 'darwin' ) {
version = cp . execSync ( 'sw_vers -productVersion' ) . toString ( ) ;
}
else if ( plat === 'linux' ) {
// lsb_release process not in some containers, readfile
// Run cat /etc/lsb-release
// DISTRIB_ID=Ubuntu
// DISTRIB_RELEASE=18.04
// DISTRIB_CODENAME=bionic
// DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
const lsbContents = module . exports . _readLinuxVersionFile ( ) ;
if ( lsbContents ) {
const lines = lsbContents . split ( '\n' ) ;
for ( const line of lines ) {
const parts = line . split ( '=' ) ;
2021-07-17 16:06:29 +00:00
if ( parts . length === 2 &&
( parts [ 0 ] . trim ( ) === 'VERSION_ID' ||
parts [ 0 ] . trim ( ) === 'DISTRIB_RELEASE' ) ) {
version = parts [ 1 ]
. trim ( )
. replace ( /^"/ , '' )
. replace ( /"$/ , '' ) ;
2021-03-02 23:07:35 +00:00
break ;
}
}
}
}
return version ;
}
exports . _getOsVersion = _getOsVersion ;
function _readLinuxVersionFile ( ) {
2021-07-17 16:06:29 +00:00
const lsbReleaseFile = '/etc/lsb-release' ;
const osReleaseFile = '/etc/os-release' ;
2021-03-02 23:07:35 +00:00
let contents = '' ;
2021-07-17 16:06:29 +00:00
if ( fs . existsSync ( lsbReleaseFile ) ) {
contents = fs . readFileSync ( lsbReleaseFile ) . toString ( ) ;
}
else if ( fs . existsSync ( osReleaseFile ) ) {
contents = fs . readFileSync ( osReleaseFile ) . toString ( ) ;
2021-03-02 23:07:35 +00:00
}
return contents ;
}
exports . _readLinuxVersionFile = _readLinuxVersionFile ;
//# sourceMappingURL=manifest.js.map
/***/ } ) ,
/***/ 8279 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) {
"use strict" ;
2021-07-17 16:06:29 +00:00
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
} ;
2021-03-02 23:07:35 +00:00
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 } ) ) ;
2021-07-17 16:06:29 +00:00
exports . RetryHelper = void 0 ;
2021-03-02 23:07:35 +00:00
const core = _ _importStar ( _ _nccwpck _require _ _ ( 2186 ) ) ;
/ * *
* Internal class for retries
* /
class RetryHelper {
constructor ( maxAttempts , minSeconds , maxSeconds ) {
if ( maxAttempts < 1 ) {
throw new Error ( 'max attempts should be greater than or equal to 1' ) ;
}
this . maxAttempts = maxAttempts ;
this . minSeconds = Math . floor ( minSeconds ) ;
this . maxSeconds = Math . floor ( maxSeconds ) ;
if ( this . minSeconds > this . maxSeconds ) {
throw new Error ( 'min seconds should be less than or equal to max seconds' ) ;
}
}
execute ( action , isRetryable ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
let attempt = 1 ;
while ( attempt < this . maxAttempts ) {
// Try
try {
return yield action ( ) ;
}
catch ( err ) {
if ( isRetryable && ! isRetryable ( err ) ) {
throw err ;
}
core . info ( err . message ) ;
}
// Sleep
const seconds = this . getSleepAmount ( ) ;
core . info ( ` Waiting ${ seconds } seconds before trying again ` ) ;
yield this . sleep ( seconds ) ;
attempt ++ ;
}
// Last attempt
return yield action ( ) ;
} ) ;
}
getSleepAmount ( ) {
return ( Math . floor ( Math . random ( ) * ( this . maxSeconds - this . minSeconds + 1 ) ) +
this . minSeconds ) ;
}
sleep ( seconds ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
return new Promise ( resolve => setTimeout ( resolve , seconds * 1000 ) ) ;
} ) ;
}
}
exports . RetryHelper = RetryHelper ;
//# sourceMappingURL=retry-helper.js.map
/***/ } ) ,
/***/ 7784 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) {
"use strict" ;
2021-07-17 16:06:29 +00:00
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
} ;
2021-03-02 23:07:35 +00:00
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 _ _importDefault = ( this && this . _ _importDefault ) || function ( mod ) {
return ( mod && mod . _ _esModule ) ? mod : { "default" : mod } ;
} ;
Object . defineProperty ( exports , "__esModule" , ( { value : true } ) ) ;
2021-07-17 16:06:29 +00:00
exports . evaluateVersions = exports . isExplicitVersion = exports . findFromManifest = exports . getManifestFromRepo = exports . findAllVersions = exports . find = exports . cacheFile = exports . cacheDir = exports . extractZip = exports . extractXar = exports . extractTar = exports . extract7z = exports . downloadTool = exports . HTTPError = void 0 ;
2021-03-02 23:07:35 +00:00
const core = _ _importStar ( _ _nccwpck _require _ _ ( 2186 ) ) ;
const io = _ _importStar ( _ _nccwpck _require _ _ ( 7436 ) ) ;
2022-04-22 03:25:41 +00:00
const fs = _ _importStar ( _ _nccwpck _require _ _ ( 7147 ) ) ;
2021-03-02 23:07:35 +00:00
const mm = _ _importStar ( _ _nccwpck _require _ _ ( 2473 ) ) ;
2022-04-22 03:25:41 +00:00
const os = _ _importStar ( _ _nccwpck _require _ _ ( 2037 ) ) ;
const path = _ _importStar ( _ _nccwpck _require _ _ ( 1017 ) ) ;
2022-08-03 13:09:19 +00:00
const httpm = _ _importStar ( _ _nccwpck _require _ _ ( 6255 ) ) ;
2021-07-17 16:06:29 +00:00
const semver = _ _importStar ( _ _nccwpck _require _ _ ( 5911 ) ) ;
2022-04-22 03:25:41 +00:00
const stream = _ _importStar ( _ _nccwpck _require _ _ ( 2781 ) ) ;
const util = _ _importStar ( _ _nccwpck _require _ _ ( 3837 ) ) ;
2022-08-03 13:09:19 +00:00
const assert _1 = _ _nccwpck _require _ _ ( 9491 ) ;
2021-03-02 23:07:35 +00:00
const v4 _1 = _ _importDefault ( _ _nccwpck _require _ _ ( 824 ) ) ;
const exec _1 = _ _nccwpck _require _ _ ( 1514 ) ;
const retry _helper _1 = _ _nccwpck _require _ _ ( 8279 ) ;
class HTTPError extends Error {
constructor ( httpStatusCode ) {
super ( ` Unexpected HTTP response: ${ httpStatusCode } ` ) ;
this . httpStatusCode = httpStatusCode ;
Object . setPrototypeOf ( this , new . target . prototype ) ;
}
}
exports . HTTPError = HTTPError ;
const IS _WINDOWS = process . platform === 'win32' ;
const IS _MAC = process . platform === 'darwin' ;
const userAgent = 'actions/tool-cache' ;
/ * *
* Download a tool from an url and stream it into a file
*
* @ param url url of tool to download
* @ param dest path to download tool
* @ param auth authorization header
2021-07-17 16:06:29 +00:00
* @ param headers other headers
2021-03-02 23:07:35 +00:00
* @ returns path to downloaded tool
* /
2021-07-17 16:06:29 +00:00
function downloadTool ( url , dest , auth , headers ) {
2021-03-02 23:07:35 +00:00
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
dest = dest || path . join ( _getTempDirectory ( ) , v4 _1 . default ( ) ) ;
yield io . mkdirP ( path . dirname ( dest ) ) ;
core . debug ( ` Downloading ${ url } ` ) ;
core . debug ( ` Destination ${ dest } ` ) ;
const maxAttempts = 3 ;
const minSeconds = _getGlobal ( 'TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS' , 10 ) ;
const maxSeconds = _getGlobal ( 'TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS' , 20 ) ;
const retryHelper = new retry _helper _1 . RetryHelper ( maxAttempts , minSeconds , maxSeconds ) ;
return yield retryHelper . execute ( ( ) => _ _awaiter ( this , void 0 , void 0 , function * ( ) {
2021-07-17 16:06:29 +00:00
return yield downloadToolAttempt ( url , dest || '' , auth , headers ) ;
2021-03-02 23:07:35 +00:00
} ) , ( err ) => {
if ( err instanceof HTTPError && err . httpStatusCode ) {
// Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests
if ( err . httpStatusCode < 500 &&
err . httpStatusCode !== 408 &&
err . httpStatusCode !== 429 ) {
return false ;
}
}
// Otherwise retry
return true ;
} ) ;
} ) ;
}
exports . downloadTool = downloadTool ;
2021-07-17 16:06:29 +00:00
function downloadToolAttempt ( url , dest , auth , headers ) {
2021-03-02 23:07:35 +00:00
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
if ( fs . existsSync ( dest ) ) {
throw new Error ( ` Destination file path ${ dest } already exists ` ) ;
}
// Get the response headers
const http = new httpm . HttpClient ( userAgent , [ ] , {
allowRetries : false
} ) ;
if ( auth ) {
core . debug ( 'set auth' ) ;
2021-07-17 16:06:29 +00:00
if ( headers === undefined ) {
headers = { } ;
}
headers . authorization = auth ;
2021-03-02 23:07:35 +00:00
}
const response = yield http . get ( url , headers ) ;
if ( response . message . statusCode !== 200 ) {
const err = new HTTPError ( response . message . statusCode ) ;
core . debug ( ` Failed to download from " ${ url } ". Code( ${ response . message . statusCode } ) Message( ${ response . message . statusMessage } ) ` ) ;
throw err ;
}
// Download the response body
const pipeline = util . promisify ( stream . pipeline ) ;
const responseMessageFactory = _getGlobal ( 'TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY' , ( ) => response . message ) ;
const readStream = responseMessageFactory ( ) ;
let succeeded = false ;
try {
yield pipeline ( readStream , fs . createWriteStream ( dest ) ) ;
core . debug ( 'download complete' ) ;
succeeded = true ;
return dest ;
}
finally {
// Error, delete dest before retry
if ( ! succeeded ) {
core . debug ( 'download failed' ) ;
try {
yield io . rmRF ( dest ) ;
}
catch ( err ) {
core . debug ( ` Failed to delete ' ${ dest } '. ${ err . message } ` ) ;
}
}
}
} ) ;
}
/ * *
* Extract a . 7 z file
*
* @ param file path to the . 7 z file
* @ param dest destination directory . Optional .
* @ param _7zPath path to 7 zr . exe . Optional , for long path support . Most . 7 z archives do not have this
* problem . If your . 7 z archive contains very long paths , you can pass the path to 7 zr . exe which will
* gracefully handle long paths . By default 7 zdec . exe is used because it is a very small program and is
* bundled with the tool lib . However it does not support long paths . 7 zr . exe is the reduced command line
* interface , it is smaller than the full command line interface , and it does support long paths . At the
* time of this writing , it is freely available from the LZMA SDK that is available on the 7 zip website .
* Be sure to check the current license agreement . If 7 zr . exe is bundled with your action , then the path
* to 7 zr . exe can be pass to this function .
* @ returns path to the destination directory
* /
function extract7z ( file , dest , _7zPath ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
assert _1 . ok ( IS _WINDOWS , 'extract7z() not supported on current OS' ) ;
assert _1 . ok ( file , 'parameter "file" is required' ) ;
dest = yield _createExtractFolder ( dest ) ;
const originalCwd = process . cwd ( ) ;
process . chdir ( dest ) ;
if ( _7zPath ) {
try {
const logLevel = core . isDebug ( ) ? '-bb1' : '-bb0' ;
const args = [
'x' ,
logLevel ,
'-bd' ,
'-sccUTF-8' ,
file
] ;
const options = {
silent : true
} ;
yield exec _1 . exec ( ` " ${ _7zPath } " ` , args , options ) ;
}
finally {
process . chdir ( originalCwd ) ;
}
}
else {
const escapedScript = path
. join ( _ _dirname , '..' , 'scripts' , 'Invoke-7zdec.ps1' )
. replace ( /'/g , "''" )
. replace ( /"|\n|\r/g , '' ) ; // double-up single quotes, remove double quotes and newlines
const escapedFile = file . replace ( /'/g , "''" ) . replace ( /"|\n|\r/g , '' ) ;
const escapedTarget = dest . replace ( /'/g , "''" ) . replace ( /"|\n|\r/g , '' ) ;
const command = ` & ' ${ escapedScript } ' -Source ' ${ escapedFile } ' -Target ' ${ escapedTarget } ' ` ;
const args = [
'-NoLogo' ,
'-Sta' ,
'-NoProfile' ,
'-NonInteractive' ,
'-ExecutionPolicy' ,
'Unrestricted' ,
'-Command' ,
command
] ;
const options = {
silent : true
} ;
try {
const powershellPath = yield io . which ( 'powershell' , true ) ;
yield exec _1 . exec ( ` " ${ powershellPath } " ` , args , options ) ;
}
finally {
process . chdir ( originalCwd ) ;
}
}
return dest ;
} ) ;
}
exports . extract7z = extract7z ;
/ * *
* Extract a compressed tar archive
*
* @ param file path to the tar
* @ param dest destination directory . Optional .
* @ param flags flags for the tar command to use for extraction . Defaults to 'xz' ( extracting gzipped tars ) . Optional .
* @ returns path to the destination directory
* /
function extractTar ( file , dest , flags = 'xz' ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
if ( ! file ) {
throw new Error ( "parameter 'file' is required" ) ;
}
// Create dest
dest = yield _createExtractFolder ( dest ) ;
// Determine whether GNU tar
core . debug ( 'Checking tar --version' ) ;
let versionOutput = '' ;
yield exec _1 . exec ( 'tar --version' , [ ] , {
ignoreReturnCode : true ,
silent : true ,
listeners : {
stdout : ( data ) => ( versionOutput += data . toString ( ) ) ,
stderr : ( data ) => ( versionOutput += data . toString ( ) )
}
} ) ;
core . debug ( versionOutput . trim ( ) ) ;
const isGnuTar = versionOutput . toUpperCase ( ) . includes ( 'GNU TAR' ) ;
// Initialize args
let args ;
if ( flags instanceof Array ) {
args = flags ;
}
else {
args = [ flags ] ;
}
if ( core . isDebug ( ) && ! flags . includes ( 'v' ) ) {
args . push ( '-v' ) ;
}
let destArg = dest ;
let fileArg = file ;
if ( IS _WINDOWS && isGnuTar ) {
args . push ( '--force-local' ) ;
destArg = dest . replace ( /\\/g , '/' ) ;
// Technically only the dest needs to have `/` but for aesthetic consistency
// convert slashes in the file arg too.
fileArg = file . replace ( /\\/g , '/' ) ;
}
if ( isGnuTar ) {
// Suppress warnings when using GNU tar to extract archives created by BSD tar
args . push ( '--warning=no-unknown-keyword' ) ;
2021-07-17 16:06:29 +00:00
args . push ( '--overwrite' ) ;
2021-03-02 23:07:35 +00:00
}
args . push ( '-C' , destArg , '-f' , fileArg ) ;
yield exec _1 . exec ( ` tar ` , args ) ;
return dest ;
} ) ;
}
exports . extractTar = extractTar ;
/ * *
* Extract a xar compatible archive
*
* @ param file path to the archive
* @ param dest destination directory . Optional .
* @ param flags flags for the xar . Optional .
* @ returns path to the destination directory
* /
function extractXar ( file , dest , flags = [ ] ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
assert _1 . ok ( IS _MAC , 'extractXar() not supported on current OS' ) ;
assert _1 . ok ( file , 'parameter "file" is required' ) ;
dest = yield _createExtractFolder ( dest ) ;
let args ;
if ( flags instanceof Array ) {
args = flags ;
}
else {
args = [ flags ] ;
}
args . push ( '-x' , '-C' , dest , '-f' , file ) ;
if ( core . isDebug ( ) ) {
args . push ( '-v' ) ;
}
const xarPath = yield io . which ( 'xar' , true ) ;
yield exec _1 . exec ( ` " ${ xarPath } " ` , _unique ( args ) ) ;
return dest ;
} ) ;
}
exports . extractXar = extractXar ;
/ * *
* Extract a zip
*
* @ param file path to the zip
* @ param dest destination directory . Optional .
* @ returns path to the destination directory
* /
function extractZip ( file , dest ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
if ( ! file ) {
throw new Error ( "parameter 'file' is required" ) ;
}
dest = yield _createExtractFolder ( dest ) ;
if ( IS _WINDOWS ) {
yield extractZipWin ( file , dest ) ;
}
else {
yield extractZipNix ( file , dest ) ;
}
return dest ;
} ) ;
}
exports . extractZip = extractZip ;
function extractZipWin ( file , dest ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
// build the powershell command
const escapedFile = file . replace ( /'/g , "''" ) . replace ( /"|\n|\r/g , '' ) ; // double-up single quotes, remove double quotes and newlines
const escapedDest = dest . replace ( /'/g , "''" ) . replace ( /"|\n|\r/g , '' ) ;
2021-07-17 16:06:29 +00:00
const pwshPath = yield io . which ( 'pwsh' , false ) ;
//To match the file overwrite behavior on nix systems, we use the overwrite = true flag for ExtractToDirectory
//and the -Force flag for Expand-Archive as a fallback
if ( pwshPath ) {
//attempt to use pwsh with ExtractToDirectory, if this fails attempt Expand-Archive
const pwshCommand = [
` $ ErrorActionPreference = 'Stop' ; ` ,
` try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ; ` ,
` try { [System.IO.Compression.ZipFile]::ExtractToDirectory(' ${ escapedFile } ', ' ${ escapedDest } ', $ true) } ` ,
` catch { if (( $ _.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ( $ _.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath ' ${ escapedFile } ' -DestinationPath ' ${ escapedDest } ' -Force } else { throw $ _ } } ; `
] . join ( ' ' ) ;
const args = [
'-NoLogo' ,
'-NoProfile' ,
'-NonInteractive' ,
'-ExecutionPolicy' ,
'Unrestricted' ,
'-Command' ,
pwshCommand
] ;
core . debug ( ` Using pwsh at path: ${ pwshPath } ` ) ;
yield exec _1 . exec ( ` " ${ pwshPath } " ` , args ) ;
}
else {
const powershellCommand = [
` $ ErrorActionPreference = 'Stop' ; ` ,
` try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; ` ,
` if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath ' ${ escapedFile } ' -DestinationPath ' ${ escapedDest } ' -Force } ` ,
` else {[System.IO.Compression.ZipFile]::ExtractToDirectory(' ${ escapedFile } ', ' ${ escapedDest } ', $ true) } `
] . join ( ' ' ) ;
const args = [
'-NoLogo' ,
'-Sta' ,
'-NoProfile' ,
'-NonInteractive' ,
'-ExecutionPolicy' ,
'Unrestricted' ,
'-Command' ,
powershellCommand
] ;
const powershellPath = yield io . which ( 'powershell' , true ) ;
core . debug ( ` Using powershell at path: ${ powershellPath } ` ) ;
yield exec _1 . exec ( ` " ${ powershellPath } " ` , args ) ;
}
} ) ;
}
function extractZipNix ( file , dest ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
const unzipPath = yield io . which ( 'unzip' , true ) ;
2021-03-02 23:07:35 +00:00
const args = [ file ] ;
if ( ! core . isDebug ( ) ) {
args . unshift ( '-q' ) ;
}
2021-07-17 16:06:29 +00:00
args . unshift ( '-o' ) ; //overwrite with -o, otherwise a prompt is shown which freezes the run
2021-03-02 23:07:35 +00:00
yield exec _1 . exec ( ` " ${ unzipPath } " ` , args , { cwd : dest } ) ;
} ) ;
}
/ * *
* Caches a directory and installs it into the tool cacheDir
*
* @ param sourceDir the directory to cache into tools
* @ param tool tool name
* @ param version version of the tool . semver format
* @ param arch architecture of the tool . Optional . Defaults to machine architecture
* /
function cacheDir ( sourceDir , tool , version , arch ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
version = semver . clean ( version ) || version ;
arch = arch || os . arch ( ) ;
core . debug ( ` Caching tool ${ tool } ${ version } ${ arch } ` ) ;
core . debug ( ` source dir: ${ sourceDir } ` ) ;
if ( ! fs . statSync ( sourceDir ) . isDirectory ( ) ) {
throw new Error ( 'sourceDir is not a directory' ) ;
}
// Create the tool dir
const destPath = yield _createToolPath ( tool , version , arch ) ;
// copy each child item. do not move. move can fail on Windows
// due to anti-virus software having an open handle on a file.
for ( const itemName of fs . readdirSync ( sourceDir ) ) {
const s = path . join ( sourceDir , itemName ) ;
yield io . cp ( s , destPath , { recursive : true } ) ;
}
// write .complete
_completeToolPath ( tool , version , arch ) ;
return destPath ;
} ) ;
}
exports . cacheDir = cacheDir ;
/ * *
* Caches a downloaded file ( GUID ) and installs it
* into the tool cache with a given targetName
*
* @ param sourceFile the file to cache into tools . Typically a result of downloadTool which is a guid .
* @ param targetFile the name of the file name in the tools directory
* @ param tool tool name
* @ param version version of the tool . semver format
* @ param arch architecture of the tool . Optional . Defaults to machine architecture
* /
function cacheFile ( sourceFile , targetFile , tool , version , arch ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
version = semver . clean ( version ) || version ;
arch = arch || os . arch ( ) ;
core . debug ( ` Caching tool ${ tool } ${ version } ${ arch } ` ) ;
core . debug ( ` source file: ${ sourceFile } ` ) ;
if ( ! fs . statSync ( sourceFile ) . isFile ( ) ) {
throw new Error ( 'sourceFile is not a file' ) ;
}
// create the tool dir
const destFolder = yield _createToolPath ( tool , version , arch ) ;
// copy instead of move. move can fail on Windows due to
// anti-virus software having an open handle on a file.
const destPath = path . join ( destFolder , targetFile ) ;
core . debug ( ` destination file ${ destPath } ` ) ;
yield io . cp ( sourceFile , destPath ) ;
// write .complete
_completeToolPath ( tool , version , arch ) ;
return destFolder ;
} ) ;
}
exports . cacheFile = cacheFile ;
/ * *
* Finds the path to a tool version in the local installed tool cache
*
* @ param toolName name of the tool
* @ param versionSpec version of the tool
* @ param arch optional arch . defaults to arch of computer
* /
function find ( toolName , versionSpec , arch ) {
if ( ! toolName ) {
throw new Error ( 'toolName parameter is required' ) ;
}
if ( ! versionSpec ) {
throw new Error ( 'versionSpec parameter is required' ) ;
}
arch = arch || os . arch ( ) ;
// attempt to resolve an explicit version
2021-07-17 16:06:29 +00:00
if ( ! isExplicitVersion ( versionSpec ) ) {
2021-03-02 23:07:35 +00:00
const localVersions = findAllVersions ( toolName , arch ) ;
2021-07-17 16:06:29 +00:00
const match = evaluateVersions ( localVersions , versionSpec ) ;
2021-03-02 23:07:35 +00:00
versionSpec = match ;
}
// check for the explicit version in the cache
let toolPath = '' ;
if ( versionSpec ) {
versionSpec = semver . clean ( versionSpec ) || '' ;
const cachePath = path . join ( _getCacheDirectory ( ) , toolName , versionSpec , arch ) ;
core . debug ( ` checking cache: ${ cachePath } ` ) ;
if ( fs . existsSync ( cachePath ) && fs . existsSync ( ` ${ cachePath } .complete ` ) ) {
core . debug ( ` Found tool in cache ${ toolName } ${ versionSpec } ${ arch } ` ) ;
toolPath = cachePath ;
}
else {
core . debug ( 'not found' ) ;
}
}
return toolPath ;
}
exports . find = find ;
/ * *
* Finds the paths to all versions of a tool that are installed in the local tool cache
*
* @ param toolName name of the tool
* @ param arch optional arch . defaults to arch of computer
* /
function findAllVersions ( toolName , arch ) {
const versions = [ ] ;
arch = arch || os . arch ( ) ;
const toolPath = path . join ( _getCacheDirectory ( ) , toolName ) ;
if ( fs . existsSync ( toolPath ) ) {
const children = fs . readdirSync ( toolPath ) ;
for ( const child of children ) {
2021-07-17 16:06:29 +00:00
if ( isExplicitVersion ( child ) ) {
2021-03-02 23:07:35 +00:00
const fullPath = path . join ( toolPath , child , arch || '' ) ;
if ( fs . existsSync ( fullPath ) && fs . existsSync ( ` ${ fullPath } .complete ` ) ) {
versions . push ( child ) ;
}
}
}
}
return versions ;
}
exports . findAllVersions = findAllVersions ;
function getManifestFromRepo ( owner , repo , auth , branch = 'master' ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
let releases = [ ] ;
const treeUrl = ` https://api.github.com/repos/ ${ owner } / ${ repo } /git/trees/ ${ branch } ` ;
const http = new httpm . HttpClient ( 'tool-cache' ) ;
const headers = { } ;
if ( auth ) {
core . debug ( 'set auth' ) ;
headers . authorization = auth ;
}
const response = yield http . getJson ( treeUrl , headers ) ;
if ( ! response . result ) {
return releases ;
}
let manifestUrl = '' ;
for ( const item of response . result . tree ) {
if ( item . path === 'versions-manifest.json' ) {
manifestUrl = item . url ;
break ;
}
}
headers [ 'accept' ] = 'application/vnd.github.VERSION.raw' ;
let versionsRaw = yield ( yield http . get ( manifestUrl , headers ) ) . readBody ( ) ;
if ( versionsRaw ) {
// shouldn't be needed but protects against invalid json saved with BOM
versionsRaw = versionsRaw . replace ( /^\uFEFF/ , '' ) ;
try {
releases = JSON . parse ( versionsRaw ) ;
}
catch ( _a ) {
core . debug ( 'Invalid json' ) ;
}
}
return releases ;
} ) ;
}
exports . getManifestFromRepo = getManifestFromRepo ;
function findFromManifest ( versionSpec , stable , manifest , archFilter = os . arch ( ) ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
// wrap the internal impl
const match = yield mm . _findMatch ( versionSpec , stable , manifest , archFilter ) ;
return match ;
} ) ;
}
exports . findFromManifest = findFromManifest ;
function _createExtractFolder ( dest ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
if ( ! dest ) {
// create a temp dir
dest = path . join ( _getTempDirectory ( ) , v4 _1 . default ( ) ) ;
}
yield io . mkdirP ( dest ) ;
return dest ;
} ) ;
}
function _createToolPath ( tool , version , arch ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
const folderPath = path . join ( _getCacheDirectory ( ) , tool , semver . clean ( version ) || version , arch || '' ) ;
core . debug ( ` destination ${ folderPath } ` ) ;
const markerPath = ` ${ folderPath } .complete ` ;
yield io . rmRF ( folderPath ) ;
yield io . rmRF ( markerPath ) ;
yield io . mkdirP ( folderPath ) ;
return folderPath ;
} ) ;
}
function _completeToolPath ( tool , version , arch ) {
const folderPath = path . join ( _getCacheDirectory ( ) , tool , semver . clean ( version ) || version , arch || '' ) ;
const markerPath = ` ${ folderPath } .complete ` ;
fs . writeFileSync ( markerPath , '' ) ;
core . debug ( 'finished caching tool' ) ;
}
2021-07-17 16:06:29 +00:00
/ * *
* Check if version string is explicit
*
* @ param versionSpec version string to check
* /
function isExplicitVersion ( versionSpec ) {
2021-03-02 23:07:35 +00:00
const c = semver . clean ( versionSpec ) || '' ;
core . debug ( ` isExplicit: ${ c } ` ) ;
const valid = semver . valid ( c ) != null ;
core . debug ( ` explicit? ${ valid } ` ) ;
return valid ;
}
2021-07-17 16:06:29 +00:00
exports . isExplicitVersion = isExplicitVersion ;
/ * *
* Get the highest satisfiying semantic version in ` versions ` which satisfies ` versionSpec `
*
* @ param versions array of versions to evaluate
* @ param versionSpec semantic version spec to satisfy
* /
function evaluateVersions ( versions , versionSpec ) {
2021-03-02 23:07:35 +00:00
let version = '' ;
core . debug ( ` evaluating ${ versions . length } versions ` ) ;
versions = versions . sort ( ( a , b ) => {
if ( semver . gt ( a , b ) ) {
return 1 ;
}
return - 1 ;
} ) ;
for ( let i = versions . length - 1 ; i >= 0 ; i -- ) {
const potential = versions [ i ] ;
const satisfied = semver . satisfies ( potential , versionSpec ) ;
if ( satisfied ) {
version = potential ;
break ;
}
}
if ( version ) {
core . debug ( ` matched: ${ version } ` ) ;
}
else {
core . debug ( 'match not found' ) ;
}
return version ;
}
2021-07-17 16:06:29 +00:00
exports . evaluateVersions = evaluateVersions ;
2021-03-02 23:07:35 +00:00
/ * *
* Gets RUNNER _TOOL _CACHE
* /
function _getCacheDirectory ( ) {
const cacheDirectory = process . env [ 'RUNNER_TOOL_CACHE' ] || '' ;
assert _1 . ok ( cacheDirectory , 'Expected RUNNER_TOOL_CACHE to be defined' ) ;
return cacheDirectory ;
}
/ * *
* Gets RUNNER _TEMP
* /
function _getTempDirectory ( ) {
const tempDirectory = process . env [ 'RUNNER_TEMP' ] || '' ;
assert _1 . ok ( tempDirectory , 'Expected RUNNER_TEMP to be defined' ) ;
return tempDirectory ;
}
/ * *
* Gets a global variable
* /
function _getGlobal ( key , defaultValue ) {
/* eslint-disable @typescript-eslint/no-explicit-any */
const value = global [ key ] ;
/* eslint-enable @typescript-eslint/no-explicit-any */
return value !== undefined ? value : defaultValue ;
}
/ * *
* Returns an array of unique values .
* @ param values Values to make unique .
* /
function _unique ( values ) {
return Array . from ( new Set ( values ) ) ;
}
//# sourceMappingURL=tool-cache.js.map
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
/***/ 9618 :
2021-07-17 16:06:29 +00:00
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const fs = _ _nccwpck _require _ _ ( 7758 )
2022-04-22 03:25:41 +00:00
const path = _ _nccwpck _require _ _ ( 1017 )
const mkdirsSync = ( _ _nccwpck _require _ _ ( 8605 ) . mkdirsSync )
const utimesMillisSync = ( _ _nccwpck _require _ _ ( 2548 ) . utimesMillisSync )
2021-07-17 16:06:29 +00:00
const stat = _ _nccwpck _require _ _ ( 3901 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function copySync ( src , dest , opts ) {
if ( typeof opts === 'function' ) {
opts = { filter : opts }
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
opts = opts || { }
opts . clobber = 'clobber' in opts ? ! ! opts . clobber : true // default to true for now
opts . overwrite = 'overwrite' in opts ? ! ! opts . overwrite : opts . clobber // overwrite falls back to clobber
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// Warn about using preserveTimestamps on 32-bit node
if ( opts . preserveTimestamps && process . arch === 'ia32' ) {
2022-04-22 03:25:41 +00:00
process . emitWarning (
'Using the preserveTimestamps option in 32-bit node is not recommended;\n\n' +
'\tsee https://github.com/jprichardson/node-fs-extra/issues/269' ,
'Warning' , 'fs-extra-WARN0002'
)
2021-07-17 16:06:29 +00:00
}
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
const { srcStat , destStat } = stat . checkPathsSync ( src , dest , 'copy' , opts )
2021-07-17 16:06:29 +00:00
stat . checkParentPathsSync ( src , srcStat , dest , 'copy' )
return handleFilterAndCopy ( destStat , src , dest , opts )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function handleFilterAndCopy ( destStat , src , dest , opts ) {
if ( opts . filter && ! opts . filter ( src , dest ) ) return
const destParent = path . dirname ( dest )
if ( ! fs . existsSync ( destParent ) ) mkdirsSync ( destParent )
2021-07-17 17:06:08 +00:00
return getStats ( destStat , src , dest , opts )
2021-07-17 16:06:29 +00:00
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function startCopy ( destStat , src , dest , opts ) {
if ( opts . filter && ! opts . filter ( src , dest ) ) return
return getStats ( destStat , src , dest , opts )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function getStats ( destStat , src , dest , opts ) {
const statSync = opts . dereference ? fs . statSync : fs . lstatSync
const srcStat = statSync ( src )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( srcStat . isDirectory ( ) ) return onDir ( srcStat , destStat , src , dest , opts )
else if ( srcStat . isFile ( ) ||
srcStat . isCharacterDevice ( ) ||
srcStat . isBlockDevice ( ) ) return onFile ( srcStat , destStat , src , dest , opts )
else if ( srcStat . isSymbolicLink ( ) ) return onLink ( destStat , src , dest , opts )
2021-07-17 17:06:08 +00:00
else if ( srcStat . isSocket ( ) ) throw new Error ( ` Cannot copy a socket file: ${ src } ` )
else if ( srcStat . isFIFO ( ) ) throw new Error ( ` Cannot copy a FIFO pipe: ${ src } ` )
throw new Error ( ` Unknown file: ${ src } ` )
2021-07-17 16:06:29 +00:00
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function onFile ( srcStat , destStat , src , dest , opts ) {
if ( ! destStat ) return copyFile ( srcStat , src , dest , opts )
return mayCopyFile ( srcStat , src , dest , opts )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function mayCopyFile ( srcStat , src , dest , opts ) {
if ( opts . overwrite ) {
fs . unlinkSync ( dest )
return copyFile ( srcStat , src , dest , opts )
} else if ( opts . errorOnExist ) {
throw new Error ( ` ' ${ dest } ' already exists ` )
}
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function copyFile ( srcStat , src , dest , opts ) {
fs . copyFileSync ( src , dest )
if ( opts . preserveTimestamps ) handleTimestamps ( srcStat . mode , src , dest )
return setDestMode ( dest , srcStat . mode )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function handleTimestamps ( srcMode , src , dest ) {
// Make sure the file is writable before setting the timestamp
// otherwise open fails with EPERM when invoked with 'r+'
// (through utimes call)
if ( fileIsNotWritable ( srcMode ) ) makeFileWritable ( dest , srcMode )
return setDestTimestamps ( src , dest )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function fileIsNotWritable ( srcMode ) {
return ( srcMode & 0o200 ) === 0
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function makeFileWritable ( dest , srcMode ) {
return setDestMode ( dest , srcMode | 0o200 )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function setDestMode ( dest , srcMode ) {
return fs . chmodSync ( dest , srcMode )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function setDestTimestamps ( src , dest ) {
// The initial srcStat.atime cannot be trusted
// because it is modified by the read(2) system call
// (See https://nodejs.org/api/fs.html#fs_stat_time_values)
const updatedSrcStat = fs . statSync ( src )
return utimesMillisSync ( dest , updatedSrcStat . atime , updatedSrcStat . mtime )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function onDir ( srcStat , destStat , src , dest , opts ) {
if ( ! destStat ) return mkDirAndCopy ( srcStat . mode , src , dest , opts )
return copyDir ( src , dest , opts )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function mkDirAndCopy ( srcMode , src , dest , opts ) {
fs . mkdirSync ( dest )
copyDir ( src , dest , opts )
return setDestMode ( dest , srcMode )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function copyDir ( src , dest , opts ) {
fs . readdirSync ( src ) . forEach ( item => copyDirItem ( item , src , dest , opts ) )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function copyDirItem ( item , src , dest , opts ) {
const srcItem = path . join ( src , item )
const destItem = path . join ( dest , item )
2021-07-17 17:06:08 +00:00
const { destStat } = stat . checkPathsSync ( srcItem , destItem , 'copy' , opts )
2021-07-17 16:06:29 +00:00
return startCopy ( destStat , srcItem , destItem , opts )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function onLink ( destStat , src , dest , opts ) {
let resolvedSrc = fs . readlinkSync ( src )
if ( opts . dereference ) {
resolvedSrc = path . resolve ( process . cwd ( ) , resolvedSrc )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( ! destStat ) {
return fs . symlinkSync ( resolvedSrc , dest )
} else {
let resolvedDest
try {
resolvedDest = fs . readlinkSync ( dest )
} catch ( err ) {
// dest exists and is a regular file or directory,
// Windows may throw UNKNOWN error. If dest already exists,
// fs throws error anyway, so no need to guard against it here.
if ( err . code === 'EINVAL' || err . code === 'UNKNOWN' ) return fs . symlinkSync ( resolvedSrc , dest )
throw err
}
if ( opts . dereference ) {
resolvedDest = path . resolve ( process . cwd ( ) , resolvedDest )
}
if ( stat . isSrcSubdir ( resolvedSrc , resolvedDest ) ) {
throw new Error ( ` Cannot copy ' ${ resolvedSrc } ' to a subdirectory of itself, ' ${ resolvedDest } '. ` )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// prevent copy if src is a subdir of dest since unlinking
// dest in this case would result in removing src contents
// and therefore a broken symlink would be created.
if ( fs . statSync ( dest ) . isDirectory ( ) && stat . isSrcSubdir ( resolvedDest , resolvedSrc ) ) {
throw new Error ( ` Cannot overwrite ' ${ resolvedDest } ' with ' ${ resolvedSrc } '. ` )
}
return copyLink ( resolvedSrc , dest )
}
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function copyLink ( resolvedSrc , dest ) {
fs . unlinkSync ( dest )
return fs . symlinkSync ( resolvedSrc , dest )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
module . exports = copySync
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 8834 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const fs = _ _nccwpck _require _ _ ( 7758 )
2022-04-22 03:25:41 +00:00
const path = _ _nccwpck _require _ _ ( 1017 )
const mkdirs = ( _ _nccwpck _require _ _ ( 8605 ) . mkdirs )
const pathExists = ( _ _nccwpck _require _ _ ( 3835 ) . pathExists )
const utimesMillis = ( _ _nccwpck _require _ _ ( 2548 ) . utimesMillis )
2021-07-17 16:06:29 +00:00
const stat = _ _nccwpck _require _ _ ( 3901 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function copy ( src , dest , opts , cb ) {
if ( typeof opts === 'function' && ! cb ) {
cb = opts
opts = { }
} else if ( typeof opts === 'function' ) {
opts = { filter : opts }
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
cb = cb || function ( ) { }
opts = opts || { }
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
opts . clobber = 'clobber' in opts ? ! ! opts . clobber : true // default to true for now
opts . overwrite = 'overwrite' in opts ? ! ! opts . overwrite : opts . clobber // overwrite falls back to clobber
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// Warn about using preserveTimestamps on 32-bit node
if ( opts . preserveTimestamps && process . arch === 'ia32' ) {
2022-04-22 03:25:41 +00:00
process . emitWarning (
'Using the preserveTimestamps option in 32-bit node is not recommended;\n\n' +
'\tsee https://github.com/jprichardson/node-fs-extra/issues/269' ,
'Warning' , 'fs-extra-WARN0001'
)
2021-03-02 23:07:35 +00:00
}
2021-07-17 17:06:08 +00:00
stat . checkPaths ( src , dest , 'copy' , opts , ( err , stats ) => {
2021-07-17 16:06:29 +00:00
if ( err ) return cb ( err )
const { srcStat , destStat } = stats
stat . checkParentPaths ( src , srcStat , dest , 'copy' , err => {
if ( err ) return cb ( err )
if ( opts . filter ) return handleFilter ( checkParentDir , destStat , src , dest , opts , cb )
return checkParentDir ( destStat , src , dest , opts , cb )
} )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function checkParentDir ( destStat , src , dest , opts , cb ) {
const destParent = path . dirname ( dest )
pathExists ( destParent , ( err , dirExists ) => {
if ( err ) return cb ( err )
2021-07-17 17:06:08 +00:00
if ( dirExists ) return getStats ( destStat , src , dest , opts , cb )
2021-07-17 16:06:29 +00:00
mkdirs ( destParent , err => {
if ( err ) return cb ( err )
2021-07-17 17:06:08 +00:00
return getStats ( destStat , src , dest , opts , cb )
2021-07-17 16:06:29 +00:00
} )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function handleFilter ( onInclude , destStat , src , dest , opts , cb ) {
Promise . resolve ( opts . filter ( src , dest ) ) . then ( include => {
if ( include ) return onInclude ( destStat , src , dest , opts , cb )
return cb ( )
} , error => cb ( error ) )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function startCopy ( destStat , src , dest , opts , cb ) {
if ( opts . filter ) return handleFilter ( getStats , destStat , src , dest , opts , cb )
return getStats ( destStat , src , dest , opts , cb )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function getStats ( destStat , src , dest , opts , cb ) {
const stat = opts . dereference ? fs . stat : fs . lstat
stat ( src , ( err , srcStat ) => {
if ( err ) return cb ( err )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( srcStat . isDirectory ( ) ) return onDir ( srcStat , destStat , src , dest , opts , cb )
else if ( srcStat . isFile ( ) ||
srcStat . isCharacterDevice ( ) ||
srcStat . isBlockDevice ( ) ) return onFile ( srcStat , destStat , src , dest , opts , cb )
else if ( srcStat . isSymbolicLink ( ) ) return onLink ( destStat , src , dest , opts , cb )
2021-07-17 17:06:08 +00:00
else if ( srcStat . isSocket ( ) ) return cb ( new Error ( ` Cannot copy a socket file: ${ src } ` ) )
else if ( srcStat . isFIFO ( ) ) return cb ( new Error ( ` Cannot copy a FIFO pipe: ${ src } ` ) )
return cb ( new Error ( ` Unknown file: ${ src } ` ) )
2021-07-17 16:06:29 +00:00
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function onFile ( srcStat , destStat , src , dest , opts , cb ) {
if ( ! destStat ) return copyFile ( srcStat , src , dest , opts , cb )
return mayCopyFile ( srcStat , src , dest , opts , cb )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function mayCopyFile ( srcStat , src , dest , opts , cb ) {
if ( opts . overwrite ) {
fs . unlink ( dest , err => {
if ( err ) return cb ( err )
return copyFile ( srcStat , src , dest , opts , cb )
} )
} else if ( opts . errorOnExist ) {
return cb ( new Error ( ` ' ${ dest } ' already exists ` ) )
} else return cb ( )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function copyFile ( srcStat , src , dest , opts , cb ) {
fs . copyFile ( src , dest , err => {
if ( err ) return cb ( err )
if ( opts . preserveTimestamps ) return handleTimestampsAndMode ( srcStat . mode , src , dest , cb )
return setDestMode ( dest , srcStat . mode , cb )
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function handleTimestampsAndMode ( srcMode , src , dest , cb ) {
// Make sure the file is writable before setting the timestamp
// otherwise open fails with EPERM when invoked with 'r+'
// (through utimes call)
if ( fileIsNotWritable ( srcMode ) ) {
return makeFileWritable ( dest , srcMode , err => {
if ( err ) return cb ( err )
return setDestTimestampsAndMode ( srcMode , src , dest , cb )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
return setDestTimestampsAndMode ( srcMode , src , dest , cb )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function fileIsNotWritable ( srcMode ) {
return ( srcMode & 0o200 ) === 0
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function makeFileWritable ( dest , srcMode , cb ) {
return setDestMode ( dest , srcMode | 0o200 , cb )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function setDestTimestampsAndMode ( srcMode , src , dest , cb ) {
setDestTimestamps ( src , dest , err => {
if ( err ) return cb ( err )
return setDestMode ( dest , srcMode , cb )
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function setDestMode ( dest , srcMode , cb ) {
return fs . chmod ( dest , srcMode , cb )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function setDestTimestamps ( src , dest , cb ) {
// The initial srcStat.atime cannot be trusted
// because it is modified by the read(2) system call
// (See https://nodejs.org/api/fs.html#fs_stat_time_values)
fs . stat ( src , ( err , updatedSrcStat ) => {
if ( err ) return cb ( err )
return utimesMillis ( dest , updatedSrcStat . atime , updatedSrcStat . mtime , cb )
} )
}
function onDir ( srcStat , destStat , src , dest , opts , cb ) {
if ( ! destStat ) return mkDirAndCopy ( srcStat . mode , src , dest , opts , cb )
return copyDir ( src , dest , opts , cb )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function mkDirAndCopy ( srcMode , src , dest , opts , cb ) {
fs . mkdir ( dest , err => {
if ( err ) return cb ( err )
copyDir ( src , dest , opts , err => {
if ( err ) return cb ( err )
return setDestMode ( dest , srcMode , cb )
2021-03-02 23:07:35 +00:00
} )
2021-07-17 16:06:29 +00:00
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function copyDir ( src , dest , opts , cb ) {
fs . readdir ( src , ( err , items ) => {
if ( err ) return cb ( err )
return copyDirItems ( items , src , dest , opts , cb )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function copyDirItems ( items , src , dest , opts , cb ) {
const item = items . pop ( )
if ( ! item ) return cb ( )
return copyDirItem ( items , item , src , dest , opts , cb )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function copyDirItem ( items , item , src , dest , opts , cb ) {
const srcItem = path . join ( src , item )
const destItem = path . join ( dest , item )
2021-07-17 17:06:08 +00:00
stat . checkPaths ( srcItem , destItem , 'copy' , opts , ( err , stats ) => {
2021-07-17 16:06:29 +00:00
if ( err ) return cb ( err )
const { destStat } = stats
startCopy ( destStat , srcItem , destItem , opts , err => {
if ( err ) return cb ( err )
return copyDirItems ( items , src , dest , opts , cb )
} )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function onLink ( destStat , src , dest , opts , cb ) {
fs . readlink ( src , ( err , resolvedSrc ) => {
if ( err ) return cb ( err )
if ( opts . dereference ) {
resolvedSrc = path . resolve ( process . cwd ( ) , resolvedSrc )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( ! destStat ) {
return fs . symlink ( resolvedSrc , dest , cb )
} else {
fs . readlink ( dest , ( err , resolvedDest ) => {
if ( err ) {
// dest exists and is a regular file or directory,
// Windows may throw UNKNOWN error. If dest already exists,
// fs throws error anyway, so no need to guard against it here.
if ( err . code === 'EINVAL' || err . code === 'UNKNOWN' ) return fs . symlink ( resolvedSrc , dest , cb )
return cb ( err )
}
if ( opts . dereference ) {
resolvedDest = path . resolve ( process . cwd ( ) , resolvedDest )
}
if ( stat . isSrcSubdir ( resolvedSrc , resolvedDest ) ) {
return cb ( new Error ( ` Cannot copy ' ${ resolvedSrc } ' to a subdirectory of itself, ' ${ resolvedDest } '. ` ) )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// do not copy if src is a subdir of dest since unlinking
// dest in this case would result in removing src contents
// and therefore a broken symlink would be created.
if ( destStat . isDirectory ( ) && stat . isSrcSubdir ( resolvedDest , resolvedSrc ) ) {
return cb ( new Error ( ` Cannot overwrite ' ${ resolvedDest } ' with ' ${ resolvedSrc } '. ` ) )
}
return copyLink ( resolvedSrc , dest , cb )
} )
}
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function copyLink ( resolvedSrc , dest , cb ) {
fs . unlink ( dest , err => {
if ( err ) return cb ( err )
return fs . symlink ( resolvedSrc , dest , cb )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
module . exports = copy
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 1335 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2022-04-22 03:25:41 +00:00
const u = ( _ _nccwpck _require _ _ ( 9046 ) . fromCallback )
2021-07-17 16:06:29 +00:00
module . exports = {
2022-04-22 03:25:41 +00:00
copy : u ( _ _nccwpck _require _ _ ( 8834 ) ) ,
copySync : _ _nccwpck _require _ _ ( 9618 )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 6970 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
const u = ( _ _nccwpck _require _ _ ( 9046 ) . fromPromise )
2021-07-17 17:06:08 +00:00
const fs = _ _nccwpck _require _ _ ( 1176 )
2022-04-22 03:25:41 +00:00
const path = _ _nccwpck _require _ _ ( 1017 )
const mkdir = _ _nccwpck _require _ _ ( 8605 )
2021-07-17 16:06:29 +00:00
const remove = _ _nccwpck _require _ _ ( 7357 )
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
const emptyDir = u ( async function emptyDir ( dir ) {
let items
try {
items = await fs . readdir ( dir )
} catch {
return mkdir . mkdirs ( dir )
}
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
return Promise . all ( items . map ( item => remove . remove ( path . join ( dir , item ) ) ) )
2021-07-17 16:06:29 +00:00
} )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function emptyDirSync ( dir ) {
let items
try {
items = fs . readdirSync ( dir )
} catch {
return mkdir . mkdirsSync ( dir )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
items . forEach ( item => {
item = path . join ( dir , item )
remove . removeSync ( item )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
module . exports = {
emptyDirSync ,
emptydirSync : emptyDirSync ,
emptyDir ,
emptydir : emptyDir
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 2164 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
const u = ( _ _nccwpck _require _ _ ( 9046 ) . fromCallback )
const path = _ _nccwpck _require _ _ ( 1017 )
2021-07-17 16:06:29 +00:00
const fs = _ _nccwpck _require _ _ ( 7758 )
2022-04-22 03:25:41 +00:00
const mkdir = _ _nccwpck _require _ _ ( 8605 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function createFile ( file , callback ) {
function makeFile ( ) {
fs . writeFile ( file , '' , err => {
if ( err ) return callback ( err )
callback ( )
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
fs . stat ( file , ( err , stats ) => { // eslint-disable-line handle-callback-err
if ( ! err && stats . isFile ( ) ) return callback ( )
const dir = path . dirname ( file )
fs . stat ( dir , ( err , stats ) => {
if ( err ) {
// if the directory doesn't exist, make it
if ( err . code === 'ENOENT' ) {
return mkdir . mkdirs ( dir , err => {
if ( err ) return callback ( err )
makeFile ( )
} )
}
return callback ( err )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( stats . isDirectory ( ) ) makeFile ( )
else {
// parent is not a directory
// This is just to cause an internal ENOTDIR error to be thrown
fs . readdir ( dir , err => {
if ( err ) return callback ( err )
} )
}
} )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function createFileSync ( file ) {
let stats
try {
stats = fs . statSync ( file )
} catch { }
if ( stats && stats . isFile ( ) ) return
const dir = path . dirname ( file )
try {
if ( ! fs . statSync ( dir ) . isDirectory ( ) ) {
// parent is not a directory
// This is just to cause an internal ENOTDIR error to be thrown
fs . readdirSync ( dir )
}
} catch ( err ) {
// If the stat call above failed because the directory doesn't exist, create it
if ( err && err . code === 'ENOENT' ) mkdir . mkdirsSync ( dir )
else throw err
}
fs . writeFileSync ( file , '' )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
module . exports = {
createFile : u ( createFile ) ,
createFileSync
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 55 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
const { createFile , createFileSync } = _ _nccwpck _require _ _ ( 2164 )
const { createLink , createLinkSync } = _ _nccwpck _require _ _ ( 3797 )
const { createSymlink , createSymlinkSync } = _ _nccwpck _require _ _ ( 2549 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
module . exports = {
// file
2022-04-22 03:25:41 +00:00
createFile ,
createFileSync ,
ensureFile : createFile ,
ensureFileSync : createFileSync ,
2021-07-17 16:06:29 +00:00
// link
2022-04-22 03:25:41 +00:00
createLink ,
createLinkSync ,
ensureLink : createLink ,
ensureLinkSync : createLinkSync ,
2021-07-17 16:06:29 +00:00
// symlink
2022-04-22 03:25:41 +00:00
createSymlink ,
createSymlinkSync ,
ensureSymlink : createSymlink ,
ensureSymlinkSync : createSymlinkSync
2021-07-17 16:06:29 +00:00
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 3797 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
const u = ( _ _nccwpck _require _ _ ( 9046 ) . fromCallback )
const path = _ _nccwpck _require _ _ ( 1017 )
2021-07-17 16:06:29 +00:00
const fs = _ _nccwpck _require _ _ ( 7758 )
2022-04-22 03:25:41 +00:00
const mkdir = _ _nccwpck _require _ _ ( 8605 )
const pathExists = ( _ _nccwpck _require _ _ ( 3835 ) . pathExists )
2021-07-17 17:06:08 +00:00
const { areIdentical } = _ _nccwpck _require _ _ ( 3901 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function createLink ( srcpath , dstpath , callback ) {
function makeLink ( srcpath , dstpath ) {
fs . link ( srcpath , dstpath , err => {
if ( err ) return callback ( err )
callback ( null )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 17:06:08 +00:00
fs . lstat ( dstpath , ( _ , dstStat ) => {
fs . lstat ( srcpath , ( err , srcStat ) => {
2021-07-17 16:06:29 +00:00
if ( err ) {
err . message = err . message . replace ( 'lstat' , 'ensureLink' )
return callback ( err )
}
2021-07-17 17:06:08 +00:00
if ( dstStat && areIdentical ( srcStat , dstStat ) ) return callback ( null )
2021-07-17 16:06:29 +00:00
const dir = path . dirname ( dstpath )
pathExists ( dir , ( err , dirExists ) => {
if ( err ) return callback ( err )
if ( dirExists ) return makeLink ( srcpath , dstpath )
mkdir . mkdirs ( dir , err => {
if ( err ) return callback ( err )
makeLink ( srcpath , dstpath )
} )
} )
} )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function createLinkSync ( srcpath , dstpath ) {
2021-07-17 17:06:08 +00:00
let dstStat
try {
dstStat = fs . lstatSync ( dstpath )
} catch { }
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
try {
2021-07-17 17:06:08 +00:00
const srcStat = fs . lstatSync ( srcpath )
if ( dstStat && areIdentical ( srcStat , dstStat ) ) return
2021-07-17 16:06:29 +00:00
} catch ( err ) {
err . message = err . message . replace ( 'lstat' , 'ensureLink' )
throw err
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
const dir = path . dirname ( dstpath )
const dirExists = fs . existsSync ( dir )
if ( dirExists ) return fs . linkSync ( srcpath , dstpath )
mkdir . mkdirsSync ( dir )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
return fs . linkSync ( srcpath , dstpath )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
module . exports = {
createLink : u ( createLink ) ,
createLinkSync
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 3727 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
const path = _ _nccwpck _require _ _ ( 1017 )
2021-07-17 16:06:29 +00:00
const fs = _ _nccwpck _require _ _ ( 7758 )
2022-04-22 03:25:41 +00:00
const pathExists = ( _ _nccwpck _require _ _ ( 3835 ) . pathExists )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/ * *
* Function that returns two types of paths , one relative to symlink , and one
* relative to the current working directory . Checks if path is absolute or
* relative . If the path is relative , this function checks if the path is
* relative to symlink or relative to current working directory . This is an
* initiative to find a smarter ` srcpath ` to supply when building symlinks .
* This allows you to determine which path to use out of one of three possible
* types of source paths . The first is an absolute path . This is detected by
* ` path.isAbsolute() ` . When an absolute path is provided , it is checked to
* see if it exists . If it does it ' s used , if not an error is returned
* ( callback ) / thrown ( sync ) . The other two options for ` srcpath ` are a
* relative url . By default Node ' s ` fs.symlink ` works by creating a symlink
* using ` dstpath ` and expects the ` srcpath ` to be relative to the newly
* created symlink . If you provide a ` srcpath ` that does not exist on the file
* system it results in a broken symlink . To minimize this , the function
* checks to see if the 'relative to symlink' source file exists , and if it
* does it will use it . If it does not , it checks if there ' s a file that
* exists that is relative to the current working directory , if does its used .
* This preserves the expectations of the original fs . symlink spec and adds
* the ability to pass in ` relative to current working direcotry ` paths .
* /
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function symlinkPaths ( srcpath , dstpath , callback ) {
if ( path . isAbsolute ( srcpath ) ) {
return fs . lstat ( srcpath , ( err ) => {
if ( err ) {
err . message = err . message . replace ( 'lstat' , 'ensureSymlink' )
return callback ( err )
}
return callback ( null , {
toCwd : srcpath ,
toDst : srcpath
} )
} )
} else {
const dstdir = path . dirname ( dstpath )
const relativeToDst = path . join ( dstdir , srcpath )
return pathExists ( relativeToDst , ( err , exists ) => {
if ( err ) return callback ( err )
if ( exists ) {
return callback ( null , {
toCwd : relativeToDst ,
toDst : srcpath
} )
} else {
return fs . lstat ( srcpath , ( err ) => {
if ( err ) {
err . message = err . message . replace ( 'lstat' , 'ensureSymlink' )
return callback ( err )
}
return callback ( null , {
toCwd : srcpath ,
toDst : path . relative ( dstdir , srcpath )
} )
} )
}
} )
}
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function symlinkPathsSync ( srcpath , dstpath ) {
let exists
if ( path . isAbsolute ( srcpath ) ) {
exists = fs . existsSync ( srcpath )
if ( ! exists ) throw new Error ( 'absolute srcpath does not exist' )
return {
toCwd : srcpath ,
toDst : srcpath
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
} else {
const dstdir = path . dirname ( dstpath )
const relativeToDst = path . join ( dstdir , srcpath )
exists = fs . existsSync ( relativeToDst )
if ( exists ) {
return {
toCwd : relativeToDst ,
toDst : srcpath
}
2021-03-02 23:07:35 +00:00
} else {
2021-07-17 16:06:29 +00:00
exists = fs . existsSync ( srcpath )
if ( ! exists ) throw new Error ( 'relative srcpath does not exist' )
return {
toCwd : srcpath ,
toDst : path . relative ( dstdir , srcpath )
}
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
module . exports = {
symlinkPaths ,
symlinkPathsSync
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 8254 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const fs = _ _nccwpck _require _ _ ( 7758 )
function symlinkType ( srcpath , type , callback ) {
callback = ( typeof type === 'function' ) ? type : callback
type = ( typeof type === 'function' ) ? false : type
if ( type ) return callback ( null , type )
fs . lstat ( srcpath , ( err , stats ) => {
if ( err ) return callback ( null , 'file' )
type = ( stats && stats . isDirectory ( ) ) ? 'dir' : 'file'
callback ( null , type )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function symlinkTypeSync ( srcpath , type ) {
let stats
if ( type ) return type
try {
stats = fs . lstatSync ( srcpath )
} catch {
return 'file'
}
return ( stats && stats . isDirectory ( ) ) ? 'dir' : 'file'
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
module . exports = {
symlinkType ,
symlinkTypeSync
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 2549 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
const u = ( _ _nccwpck _require _ _ ( 9046 ) . fromCallback )
const path = _ _nccwpck _require _ _ ( 1017 )
2021-07-17 17:06:08 +00:00
const fs = _ _nccwpck _require _ _ ( 1176 )
2022-04-22 03:25:41 +00:00
const _mkdirs = _ _nccwpck _require _ _ ( 8605 )
2021-07-17 16:06:29 +00:00
const mkdirs = _mkdirs . mkdirs
const mkdirsSync = _mkdirs . mkdirsSync
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const _symlinkPaths = _ _nccwpck _require _ _ ( 3727 )
const symlinkPaths = _symlinkPaths . symlinkPaths
const symlinkPathsSync = _symlinkPaths . symlinkPathsSync
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const _symlinkType = _ _nccwpck _require _ _ ( 8254 )
const symlinkType = _symlinkType . symlinkType
const symlinkTypeSync = _symlinkType . symlinkTypeSync
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
const pathExists = ( _ _nccwpck _require _ _ ( 3835 ) . pathExists )
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
const { areIdentical } = _ _nccwpck _require _ _ ( 3901 )
2021-07-17 16:06:29 +00:00
function createSymlink ( srcpath , dstpath , type , callback ) {
callback = ( typeof type === 'function' ) ? type : callback
type = ( typeof type === 'function' ) ? false : type
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
fs . lstat ( dstpath , ( err , stats ) => {
if ( ! err && stats . isSymbolicLink ( ) ) {
Promise . all ( [
fs . stat ( srcpath ) ,
fs . stat ( dstpath )
] ) . then ( ( [ srcStat , dstStat ] ) => {
if ( areIdentical ( srcStat , dstStat ) ) return callback ( null )
_createSymlink ( srcpath , dstpath , type , callback )
} )
} else _createSymlink ( srcpath , dstpath , type , callback )
} )
}
function _createSymlink ( srcpath , dstpath , type , callback ) {
symlinkPaths ( srcpath , dstpath , ( err , relative ) => {
2021-07-17 16:06:29 +00:00
if ( err ) return callback ( err )
2021-07-17 17:06:08 +00:00
srcpath = relative . toDst
symlinkType ( relative . toCwd , type , ( err , type ) => {
2021-07-17 16:06:29 +00:00
if ( err ) return callback ( err )
2021-07-17 17:06:08 +00:00
const dir = path . dirname ( dstpath )
pathExists ( dir , ( err , dirExists ) => {
2021-07-17 16:06:29 +00:00
if ( err ) return callback ( err )
2021-07-17 17:06:08 +00:00
if ( dirExists ) return fs . symlink ( srcpath , dstpath , type , callback )
mkdirs ( dir , err => {
2021-07-17 16:06:29 +00:00
if ( err ) return callback ( err )
2021-07-17 17:06:08 +00:00
fs . symlink ( srcpath , dstpath , type , callback )
2021-07-17 16:06:29 +00:00
} )
} )
2021-03-02 23:07:35 +00:00
} )
} )
}
2021-07-17 16:06:29 +00:00
function createSymlinkSync ( srcpath , dstpath , type ) {
2021-07-17 17:06:08 +00:00
let stats
try {
stats = fs . lstatSync ( dstpath )
} catch { }
if ( stats && stats . isSymbolicLink ( ) ) {
const srcStat = fs . statSync ( srcpath )
const dstStat = fs . statSync ( dstpath )
if ( areIdentical ( srcStat , dstStat ) ) return
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const relative = symlinkPathsSync ( srcpath , dstpath )
srcpath = relative . toDst
type = symlinkTypeSync ( relative . toCwd , type )
const dir = path . dirname ( dstpath )
const exists = fs . existsSync ( dir )
if ( exists ) return fs . symlinkSync ( srcpath , dstpath , type )
mkdirsSync ( dir )
return fs . symlinkSync ( srcpath , dstpath , type )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
module . exports = {
createSymlink : u ( createSymlink ) ,
createSymlinkSync
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 1176 :
/***/ ( ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// This is adapted from https://github.com/normalize/mz
// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors
2022-04-22 03:25:41 +00:00
const u = ( _ _nccwpck _require _ _ ( 9046 ) . fromCallback )
2021-07-17 16:06:29 +00:00
const fs = _ _nccwpck _require _ _ ( 7758 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const api = [
'access' ,
'appendFile' ,
'chmod' ,
'chown' ,
'close' ,
'copyFile' ,
'fchmod' ,
'fchown' ,
'fdatasync' ,
'fstat' ,
'fsync' ,
'ftruncate' ,
'futimes' ,
'lchmod' ,
'lchown' ,
'link' ,
'lstat' ,
'mkdir' ,
'mkdtemp' ,
'open' ,
'opendir' ,
'readdir' ,
'readFile' ,
'readlink' ,
'realpath' ,
'rename' ,
'rm' ,
'rmdir' ,
'stat' ,
'symlink' ,
'truncate' ,
'unlink' ,
'utimes' ,
'writeFile'
] . filter ( key => {
// Some commands are not available on some systems. Ex:
// fs.opendir was added in Node.js v12.12.0
// fs.rm was added in Node.js v14.14.0
// fs.lchown is not available on at least some Linux
return typeof fs [ key ] === 'function'
} )
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
// Export cloned fs:
Object . assign ( exports , fs )
2021-07-17 16:06:29 +00:00
// Universalify async methods:
api . forEach ( method => {
exports [ method ] = u ( fs [ method ] )
} )
// We differ from mz/fs in that we still ship the old, broken, fs.exists()
// since we are a drop-in replacement for the native module
exports . exists = function ( filename , callback ) {
if ( typeof callback === 'function' ) {
return fs . exists ( filename , callback )
}
return new Promise ( resolve => {
return fs . exists ( filename , resolve )
2021-03-02 23:07:35 +00:00
} )
}
2021-07-17 16:06:29 +00:00
// fs.read(), fs.write(), & fs.writev() need special treatment due to multiple callback args
exports . read = function ( fd , buffer , offset , length , position , callback ) {
if ( typeof callback === 'function' ) {
return fs . read ( fd , buffer , offset , length , position , callback )
}
return new Promise ( ( resolve , reject ) => {
fs . read ( fd , buffer , offset , length , position , ( err , bytesRead , buffer ) => {
if ( err ) return reject ( err )
resolve ( { bytesRead , buffer } )
} )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
// Function signature can be
// fs.write(fd, buffer[, offset[, length[, position]]], callback)
// OR
// fs.write(fd, string[, position[, encoding]], callback)
// We need to handle both cases, so we use ...args
exports . write = function ( fd , buffer , ... args ) {
if ( typeof args [ args . length - 1 ] === 'function' ) {
return fs . write ( fd , buffer , ... args )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
return new Promise ( ( resolve , reject ) => {
fs . write ( fd , buffer , ... args , ( err , bytesWritten , buffer ) => {
if ( err ) return reject ( err )
resolve ( { bytesWritten , buffer } )
} )
} )
}
// fs.writev only available in Node v12.9.0+
if ( typeof fs . writev === 'function' ) {
// Function signature is
// s.writev(fd, buffers[, position], callback)
// We need to handle the optional arg, so we use ...args
exports . writev = function ( fd , buffers , ... args ) {
if ( typeof args [ args . length - 1 ] === 'function' ) {
return fs . writev ( fd , buffers , ... args )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
return new Promise ( ( resolve , reject ) => {
fs . writev ( fd , buffers , ... args , ( err , bytesWritten , buffers ) => {
if ( err ) return reject ( err )
resolve ( { bytesWritten , buffers } )
} )
} )
}
}
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
// fs.realpath.native sometimes not available if fs is monkey-patched
if ( typeof fs . realpath . native === 'function' ) {
exports . realpath . native = u ( fs . realpath . native )
} else {
process . emitWarning (
'fs.realpath.native is not a function. Is fs being monkey-patched?' ,
'Warning' , 'fs-extra-WARN0003'
)
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 5630 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
module . exports = {
// Export promiseified graceful-fs:
... _ _nccwpck _require _ _ ( 1176 ) ,
// Export extra methods:
... _ _nccwpck _require _ _ ( 1335 ) ,
... _ _nccwpck _require _ _ ( 6970 ) ,
... _ _nccwpck _require _ _ ( 55 ) ,
... _ _nccwpck _require _ _ ( 213 ) ,
2022-04-22 03:25:41 +00:00
... _ _nccwpck _require _ _ ( 8605 ) ,
2021-07-17 16:06:29 +00:00
... _ _nccwpck _require _ _ ( 1497 ) ,
2022-04-22 03:25:41 +00:00
... _ _nccwpck _require _ _ ( 1832 ) ,
2021-07-17 16:06:29 +00:00
... _ _nccwpck _require _ _ ( 3835 ) ,
... _ _nccwpck _require _ _ ( 7357 )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 213 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
const u = ( _ _nccwpck _require _ _ ( 9046 ) . fromPromise )
2021-07-17 16:06:29 +00:00
const jsonFile = _ _nccwpck _require _ _ ( 8970 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
jsonFile . outputJson = u ( _ _nccwpck _require _ _ ( 531 ) )
jsonFile . outputJsonSync = _ _nccwpck _require _ _ ( 9421 )
// aliases
jsonFile . outputJSON = jsonFile . outputJson
jsonFile . outputJSONSync = jsonFile . outputJsonSync
jsonFile . writeJSON = jsonFile . writeJson
jsonFile . writeJSONSync = jsonFile . writeJsonSync
jsonFile . readJSON = jsonFile . readJson
jsonFile . readJSONSync = jsonFile . readJsonSync
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
module . exports = jsonFile
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 8970 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const jsonFile = _ _nccwpck _require _ _ ( 6160 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
module . exports = {
// jsonfile exports
readJson : jsonFile . readFile ,
readJsonSync : jsonFile . readFileSync ,
writeJson : jsonFile . writeFile ,
writeJsonSync : jsonFile . writeFileSync
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 9421 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const { stringify } = _ _nccwpck _require _ _ ( 5902 )
2022-04-22 03:25:41 +00:00
const { outputFileSync } = _ _nccwpck _require _ _ ( 1832 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function outputJsonSync ( file , data , options ) {
const str = stringify ( data , options )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
outputFileSync ( file , str , options )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
module . exports = outputJsonSync
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 531 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const { stringify } = _ _nccwpck _require _ _ ( 5902 )
2022-04-22 03:25:41 +00:00
const { outputFile } = _ _nccwpck _require _ _ ( 1832 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
async function outputJson ( file , data , options = { } ) {
const str = stringify ( data , options )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
await outputFile ( file , str , options )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
module . exports = outputJson
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
/***/ 8605 :
2021-07-17 16:06:29 +00:00
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
const u = ( _ _nccwpck _require _ _ ( 9046 ) . fromPromise )
2021-07-17 16:06:29 +00:00
const { makeDir : _makeDir , makeDirSync } = _ _nccwpck _require _ _ ( 2751 )
const makeDir = u ( _makeDir )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
module . exports = {
mkdirs : makeDir ,
mkdirsSync : makeDirSync ,
// alias
mkdirp : makeDir ,
mkdirpSync : makeDirSync ,
ensureDir : makeDir ,
ensureDirSync : makeDirSync
2021-03-02 23:07:35 +00:00
}
/***/ } ) ,
2021-07-17 16:06:29 +00:00
/***/ 2751 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
"use strict" ;
2021-07-17 16:06:29 +00:00
const fs = _ _nccwpck _require _ _ ( 1176 )
2021-07-17 17:06:08 +00:00
const { checkPath } = _ _nccwpck _require _ _ ( 9907 )
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
const getMode = options => {
2021-07-17 16:06:29 +00:00
const defaults = { mode : 0o777 }
2021-07-17 17:06:08 +00:00
if ( typeof options === 'number' ) return options
return ( { ... defaults , ... options } ) . mode
2021-03-02 23:07:35 +00:00
}
2021-07-17 17:06:08 +00:00
module . exports . makeDir = async ( dir , options ) => {
checkPath ( dir )
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
return fs . mkdir ( dir , {
mode : getMode ( options ) ,
recursive : true
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
module . exports . makeDirSync = ( dir , options ) => {
checkPath ( dir )
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
return fs . mkdirSync ( dir , {
mode : getMode ( options ) ,
recursive : true
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 17:06:08 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
/***/ 9907 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
"use strict" ;
// Adapted from https://github.com/sindresorhus/make-dir
// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2021-07-17 16:06:29 +00:00
2022-04-22 03:25:41 +00:00
const path = _ _nccwpck _require _ _ ( 1017 )
2021-07-17 16:06:29 +00:00
2021-07-17 17:06:08 +00:00
// https://github.com/nodejs/node/issues/8987
// https://github.com/libuv/libuv/pull/1088
module . exports . checkPath = function checkPath ( pth ) {
if ( process . platform === 'win32' ) {
const pathHasInvalidWinCharacters = /[<>:"|?*]/ . test ( pth . replace ( path . parse ( pth ) . root , '' ) )
2021-07-17 16:06:29 +00:00
2021-07-17 17:06:08 +00:00
if ( pathHasInvalidWinCharacters ) {
const error = new Error ( ` Path contains invalid characters: ${ pth } ` )
error . code = 'EINVAL'
throw error
2021-03-02 23:07:35 +00:00
}
}
}
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 1497 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
"use strict" ;
2022-04-22 03:25:41 +00:00
const u = ( _ _nccwpck _require _ _ ( 9046 ) . fromCallback )
2021-03-02 23:07:35 +00:00
module . exports = {
2022-04-22 03:25:41 +00:00
move : u ( _ _nccwpck _require _ _ ( 2231 ) ) ,
moveSync : _ _nccwpck _require _ _ ( 2047 )
2021-03-02 23:07:35 +00:00
}
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 2047 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
"use strict" ;
const fs = _ _nccwpck _require _ _ ( 7758 )
2022-04-22 03:25:41 +00:00
const path = _ _nccwpck _require _ _ ( 1017 )
const copySync = ( _ _nccwpck _require _ _ ( 1335 ) . copySync )
const removeSync = ( _ _nccwpck _require _ _ ( 7357 ) . removeSync )
const mkdirpSync = ( _ _nccwpck _require _ _ ( 8605 ) . mkdirpSync )
2021-03-02 23:07:35 +00:00
const stat = _ _nccwpck _require _ _ ( 3901 )
2021-07-17 16:06:29 +00:00
function moveSync ( src , dest , opts ) {
2021-03-02 23:07:35 +00:00
opts = opts || { }
2021-07-17 16:06:29 +00:00
const overwrite = opts . overwrite || opts . clobber || false
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
const { srcStat , isChangingCase = false } = stat . checkPathsSync ( src , dest , 'move' , opts )
2021-07-17 16:06:29 +00:00
stat . checkParentPathsSync ( src , srcStat , dest , 'move' )
2021-07-17 17:06:08 +00:00
if ( ! isParentRoot ( dest ) ) mkdirpSync ( path . dirname ( dest ) )
return doRename ( src , dest , overwrite , isChangingCase )
2021-07-17 16:06:29 +00:00
}
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
function isParentRoot ( dest ) {
const parent = path . dirname ( dest )
const parsedPath = path . parse ( parent )
return parsedPath . root === parent
}
function doRename ( src , dest , overwrite , isChangingCase ) {
if ( isChangingCase ) return rename ( src , dest , overwrite )
2021-07-17 16:06:29 +00:00
if ( overwrite ) {
removeSync ( dest )
return rename ( src , dest , overwrite )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
if ( fs . existsSync ( dest ) ) throw new Error ( 'dest already exists.' )
return rename ( src , dest , overwrite )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function rename ( src , dest , overwrite ) {
try {
fs . renameSync ( src , dest )
} catch ( err ) {
if ( err . code !== 'EXDEV' ) throw err
return moveAcrossDevice ( src , dest , overwrite )
}
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function moveAcrossDevice ( src , dest , overwrite ) {
const opts = {
overwrite ,
errorOnExist : true
}
copySync ( src , dest , opts )
return removeSync ( src )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
module . exports = moveSync
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 2231 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
"use strict" ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const fs = _ _nccwpck _require _ _ ( 7758 )
2022-04-22 03:25:41 +00:00
const path = _ _nccwpck _require _ _ ( 1017 )
const copy = ( _ _nccwpck _require _ _ ( 1335 ) . copy )
const remove = ( _ _nccwpck _require _ _ ( 7357 ) . remove )
const mkdirp = ( _ _nccwpck _require _ _ ( 8605 ) . mkdirp )
const pathExists = ( _ _nccwpck _require _ _ ( 3835 ) . pathExists )
2021-07-17 16:06:29 +00:00
const stat = _ _nccwpck _require _ _ ( 3901 )
function move ( src , dest , opts , cb ) {
if ( typeof opts === 'function' ) {
cb = opts
opts = { }
2021-03-02 23:07:35 +00:00
}
2022-04-22 03:25:41 +00:00
opts = opts || { }
2021-07-17 16:06:29 +00:00
const overwrite = opts . overwrite || opts . clobber || false
2021-07-17 17:06:08 +00:00
stat . checkPaths ( src , dest , 'move' , opts , ( err , stats ) => {
2021-03-02 23:07:35 +00:00
if ( err ) return cb ( err )
2021-07-17 17:06:08 +00:00
const { srcStat , isChangingCase = false } = stats
2021-07-17 16:06:29 +00:00
stat . checkParentPaths ( src , srcStat , dest , 'move' , err => {
2021-03-02 23:07:35 +00:00
if ( err ) return cb ( err )
2021-07-17 17:06:08 +00:00
if ( isParentRoot ( dest ) ) return doRename ( src , dest , overwrite , isChangingCase , cb )
2021-07-17 16:06:29 +00:00
mkdirp ( path . dirname ( dest ) , err => {
if ( err ) return cb ( err )
2021-07-17 17:06:08 +00:00
return doRename ( src , dest , overwrite , isChangingCase , cb )
2021-07-17 16:06:29 +00:00
} )
2021-03-02 23:07:35 +00:00
} )
} )
}
2021-07-17 17:06:08 +00:00
function isParentRoot ( dest ) {
const parent = path . dirname ( dest )
const parsedPath = path . parse ( parent )
return parsedPath . root === parent
}
function doRename ( src , dest , overwrite , isChangingCase , cb ) {
if ( isChangingCase ) return rename ( src , dest , overwrite , cb )
2021-07-17 16:06:29 +00:00
if ( overwrite ) {
return remove ( dest , err => {
if ( err ) return cb ( err )
return rename ( src , dest , overwrite , cb )
} )
}
pathExists ( dest , ( err , destExists ) => {
2021-03-02 23:07:35 +00:00
if ( err ) return cb ( err )
2021-07-17 16:06:29 +00:00
if ( destExists ) return cb ( new Error ( 'dest already exists.' ) )
return rename ( src , dest , overwrite , cb )
2021-03-02 23:07:35 +00:00
} )
}
2021-07-17 16:06:29 +00:00
function rename ( src , dest , overwrite , cb ) {
fs . rename ( src , dest , err => {
if ( ! err ) return cb ( )
if ( err . code !== 'EXDEV' ) return cb ( err )
return moveAcrossDevice ( src , dest , overwrite , cb )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function moveAcrossDevice ( src , dest , overwrite , cb ) {
const opts = {
overwrite ,
errorOnExist : true
}
copy ( src , dest , opts , err => {
2021-03-02 23:07:35 +00:00
if ( err ) return cb ( err )
2021-07-17 16:06:29 +00:00
return remove ( src , cb )
2021-03-02 23:07:35 +00:00
} )
}
2021-07-17 16:06:29 +00:00
module . exports = move
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
/***/ 1832 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
"use strict" ;
2022-04-22 03:25:41 +00:00
const u = ( _ _nccwpck _require _ _ ( 9046 ) . fromCallback )
2021-03-02 23:07:35 +00:00
const fs = _ _nccwpck _require _ _ ( 7758 )
2022-04-22 03:25:41 +00:00
const path = _ _nccwpck _require _ _ ( 1017 )
const mkdir = _ _nccwpck _require _ _ ( 8605 )
const pathExists = ( _ _nccwpck _require _ _ ( 3835 ) . pathExists )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function outputFile ( file , data , encoding , callback ) {
if ( typeof encoding === 'function' ) {
callback = encoding
encoding = 'utf8'
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const dir = path . dirname ( file )
pathExists ( dir , ( err , itDoes ) => {
if ( err ) return callback ( err )
if ( itDoes ) return fs . writeFile ( file , data , encoding , callback )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
mkdir . mkdirs ( dir , err => {
if ( err ) return callback ( err )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
fs . writeFile ( file , data , encoding , callback )
} )
2021-03-02 23:07:35 +00:00
} )
2021-07-17 16:06:29 +00:00
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function outputFileSync ( file , ... args ) {
const dir = path . dirname ( file )
if ( fs . existsSync ( dir ) ) {
return fs . writeFileSync ( file , ... args )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
mkdir . mkdirsSync ( dir )
fs . writeFileSync ( file , ... args )
2021-03-02 23:07:35 +00:00
}
module . exports = {
2021-07-17 16:06:29 +00:00
outputFile : u ( outputFile ) ,
outputFileSync
2021-03-02 23:07:35 +00:00
}
/***/ } ) ,
2021-07-17 16:06:29 +00:00
/***/ 3835 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
"use strict" ;
2022-04-22 03:25:41 +00:00
const u = ( _ _nccwpck _require _ _ ( 9046 ) . fromPromise )
2021-07-17 16:06:29 +00:00
const fs = _ _nccwpck _require _ _ ( 1176 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function pathExists ( path ) {
return fs . access ( path ) . then ( ( ) => true ) . catch ( ( ) => false )
2021-03-02 23:07:35 +00:00
}
module . exports = {
2021-07-17 16:06:29 +00:00
pathExists : u ( pathExists ) ,
pathExistsSync : fs . existsSync
2021-03-02 23:07:35 +00:00
}
/***/ } ) ,
2021-07-17 16:06:29 +00:00
/***/ 7357 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
const fs = _ _nccwpck _require _ _ ( 7758 )
2022-04-22 03:25:41 +00:00
const u = ( _ _nccwpck _require _ _ ( 9046 ) . fromCallback )
2021-07-17 16:06:29 +00:00
const rimraf = _ _nccwpck _require _ _ ( 8761 )
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
function remove ( path , callback ) {
// Node 14.14.0+
if ( fs . rm ) return fs . rm ( path , { recursive : true , force : true } , callback )
rimraf ( path , callback )
}
function removeSync ( path ) {
// Node 14.14.0+
if ( fs . rmSync ) return fs . rmSync ( path , { recursive : true , force : true } )
rimraf . sync ( path )
}
2021-03-02 23:07:35 +00:00
module . exports = {
2021-07-17 17:06:08 +00:00
remove : u ( remove ) ,
removeSync
2021-03-02 23:07:35 +00:00
}
/***/ } ) ,
2021-07-17 16:06:29 +00:00
/***/ 8761 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
"use strict" ;
const fs = _ _nccwpck _require _ _ ( 7758 )
2022-04-22 03:25:41 +00:00
const path = _ _nccwpck _require _ _ ( 1017 )
const assert = _ _nccwpck _require _ _ ( 9491 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const isWindows = ( process . platform === 'win32' )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function defaults ( options ) {
const methods = [
'unlink' ,
'chmod' ,
'stat' ,
'lstat' ,
'rmdir' ,
'readdir'
]
methods . forEach ( m => {
options [ m ] = options [ m ] || fs [ m ]
m = m + 'Sync'
options [ m ] = options [ m ] || fs [ m ]
2021-03-02 23:07:35 +00:00
} )
2021-07-17 16:06:29 +00:00
options . maxBusyTries = options . maxBusyTries || 3
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function rimraf ( p , options , cb ) {
let busyTries = 0
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( typeof options === 'function' ) {
cb = options
options = { }
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
assert ( p , 'rimraf: missing path' )
assert . strictEqual ( typeof p , 'string' , 'rimraf: path should be a string' )
assert . strictEqual ( typeof cb , 'function' , 'rimraf: callback function required' )
assert ( options , 'rimraf: invalid options argument provided' )
assert . strictEqual ( typeof options , 'object' , 'rimraf: options should be object' )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
defaults ( options )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
rimraf _ ( p , options , function CB ( er ) {
if ( er ) {
if ( ( er . code === 'EBUSY' || er . code === 'ENOTEMPTY' || er . code === 'EPERM' ) &&
busyTries < options . maxBusyTries ) {
busyTries ++
const time = busyTries * 100
// try again, with the same exact callback as this one.
return setTimeout ( ( ) => rimraf _ ( p , options , CB ) , time )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
// already gone
if ( er . code === 'ENOENT' ) er = null
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
cb ( er )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
// Two possible strategies.
// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR
// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR
//
// Both result in an extra syscall when you guess wrong. However, there
// are likely far more normal files in the world than directories. This
// is based on the assumption that a the average number of files per
// directory is >= 1.
//
// If anyone ever complains about this, then I guess the strategy could
// be made configurable somehow. But until then, YAGNI.
function rimraf _ ( p , options , cb ) {
assert ( p )
assert ( options )
assert ( typeof cb === 'function' )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// sunos lets the root user unlink directories, which is... weird.
// so we have to lstat here and make sure it's not a dir.
options . lstat ( p , ( er , st ) => {
if ( er && er . code === 'ENOENT' ) {
return cb ( null )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// Windows can EPERM on stat. Life is suffering.
if ( er && er . code === 'EPERM' && isWindows ) {
return fixWinEPERM ( p , options , er , cb )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( st && st . isDirectory ( ) ) {
return rmdir ( p , options , er , cb )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
options . unlink ( p , er => {
if ( er ) {
if ( er . code === 'ENOENT' ) {
return cb ( null )
}
if ( er . code === 'EPERM' ) {
return ( isWindows )
? fixWinEPERM ( p , options , er , cb )
: rmdir ( p , options , er , cb )
}
if ( er . code === 'EISDIR' ) {
return rmdir ( p , options , er , cb )
}
}
return cb ( er )
} )
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function fixWinEPERM ( p , options , er , cb ) {
assert ( p )
assert ( options )
assert ( typeof cb === 'function' )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
options . chmod ( p , 0o666 , er2 => {
if ( er2 ) {
cb ( er2 . code === 'ENOENT' ? null : er )
} else {
options . stat ( p , ( er3 , stats ) => {
if ( er3 ) {
cb ( er3 . code === 'ENOENT' ? null : er )
} else if ( stats . isDirectory ( ) ) {
rmdir ( p , options , er , cb )
} else {
options . unlink ( p , cb )
}
} )
}
2021-03-02 23:07:35 +00:00
} )
}
2021-07-17 16:06:29 +00:00
function fixWinEPERMSync ( p , options , er ) {
2021-03-02 23:07:35 +00:00
let stats
2021-07-17 16:06:29 +00:00
assert ( p )
assert ( options )
2021-03-02 23:07:35 +00:00
try {
2021-07-17 16:06:29 +00:00
options . chmodSync ( p , 0o666 )
} catch ( er2 ) {
if ( er2 . code === 'ENOENT' ) {
return
} else {
throw er
}
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
try {
stats = options . statSync ( p )
} catch ( er3 ) {
if ( er3 . code === 'ENOENT' ) {
return
} else {
throw er
}
}
if ( stats . isDirectory ( ) ) {
rmdirSync ( p , options , er )
} else {
options . unlinkSync ( p )
}
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function rmdir ( p , options , originalEr , cb ) {
assert ( p )
assert ( options )
assert ( typeof cb === 'function' )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
// if we guessed wrong, and it's not a directory, then
// raise the original error.
options . rmdir ( p , er => {
if ( er && ( er . code === 'ENOTEMPTY' || er . code === 'EEXIST' || er . code === 'EPERM' ) ) {
rmkids ( p , options , cb )
} else if ( er && er . code === 'ENOTDIR' ) {
cb ( originalEr )
} else {
cb ( er )
}
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function rmkids ( p , options , cb ) {
assert ( p )
assert ( options )
assert ( typeof cb === 'function' )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
options . readdir ( p , ( er , files ) => {
if ( er ) return cb ( er )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
let n = files . length
let errState
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( n === 0 ) return options . rmdir ( p , cb )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
files . forEach ( f => {
rimraf ( path . join ( p , f ) , options , er => {
if ( errState ) {
return
}
if ( er ) return cb ( errState = er )
if ( -- n === 0 ) {
options . rmdir ( p , cb )
}
2021-03-02 23:07:35 +00:00
} )
} )
} )
}
2021-07-17 16:06:29 +00:00
// this looks simpler, and is strictly *faster*, but will
// tie up the JavaScript thread and fail on excessively
// deep directory trees.
function rimrafSync ( p , options ) {
let st
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
options = options || { }
defaults ( options )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
assert ( p , 'rimraf: missing path' )
assert . strictEqual ( typeof p , 'string' , 'rimraf: path should be a string' )
assert ( options , 'rimraf: missing options' )
assert . strictEqual ( typeof options , 'object' , 'rimraf: options should be object' )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
try {
st = options . lstatSync ( p )
} catch ( er ) {
if ( er . code === 'ENOENT' ) {
return
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// Windows can EPERM on stat. Life is suffering.
if ( er . code === 'EPERM' && isWindows ) {
fixWinEPERMSync ( p , options , er )
}
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
try {
// sunos lets the root user unlink directories, which is... weird.
if ( st && st . isDirectory ( ) ) {
rmdirSync ( p , options , null )
} else {
options . unlinkSync ( p )
}
} catch ( er ) {
if ( er . code === 'ENOENT' ) {
return
} else if ( er . code === 'EPERM' ) {
return isWindows ? fixWinEPERMSync ( p , options , er ) : rmdirSync ( p , options , er )
} else if ( er . code !== 'EISDIR' ) {
throw er
}
rmdirSync ( p , options , er )
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
function rmdirSync ( p , options , originalEr ) {
assert ( p )
assert ( options )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
try {
options . rmdirSync ( p )
} catch ( er ) {
if ( er . code === 'ENOTDIR' ) {
throw originalEr
} else if ( er . code === 'ENOTEMPTY' || er . code === 'EEXIST' || er . code === 'EPERM' ) {
rmkidsSync ( p , options )
} else if ( er . code !== 'ENOENT' ) {
throw er
}
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
function rmkidsSync ( p , options ) {
assert ( p )
assert ( options )
options . readdirSync ( p ) . forEach ( f => rimrafSync ( path . join ( p , f ) , options ) )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( isWindows ) {
// We only end up here once we got ENOTEMPTY at least once, and
// at this point, we are guaranteed to have removed all the kids.
// So, we know that it won't be ENOENT or ENOTDIR or anything else.
// try really hard to delete stuff on windows, because it has a
// PROFOUNDLY annoying habit of not closing handles promptly when
// files are deleted, resulting in spurious ENOTEMPTY errors.
const startTime = Date . now ( )
do {
try {
const ret = options . rmdirSync ( p , options )
return ret
} catch { }
} while ( Date . now ( ) - startTime < 500 ) // give up after 500ms
} else {
const ret = options . rmdirSync ( p , options )
return ret
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
module . exports = rimraf
rimraf . sync = rimrafSync
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2021-07-17 16:06:29 +00:00
/***/ 3901 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
"use strict" ;
2021-07-17 16:06:29 +00:00
const fs = _ _nccwpck _require _ _ ( 1176 )
2022-04-22 03:25:41 +00:00
const path = _ _nccwpck _require _ _ ( 1017 )
const util = _ _nccwpck _require _ _ ( 3837 )
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
function getStats ( src , dest , opts ) {
const statFunc = opts . dereference
? ( file ) => fs . stat ( file , { bigint : true } )
: ( file ) => fs . lstat ( file , { bigint : true } )
2021-07-17 16:06:29 +00:00
return Promise . all ( [
2021-07-17 17:06:08 +00:00
statFunc ( src ) ,
statFunc ( dest ) . catch ( err => {
2021-07-17 16:06:29 +00:00
if ( err . code === 'ENOENT' ) return null
throw err
} )
] ) . then ( ( [ srcStat , destStat ] ) => ( { srcStat , destStat } ) )
}
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
function getStatsSync ( src , dest , opts ) {
2021-07-17 16:06:29 +00:00
let destStat
2021-07-17 17:06:08 +00:00
const statFunc = opts . dereference
? ( file ) => fs . statSync ( file , { bigint : true } )
: ( file ) => fs . lstatSync ( file , { bigint : true } )
const srcStat = statFunc ( src )
2021-07-17 16:06:29 +00:00
try {
2021-07-17 17:06:08 +00:00
destStat = statFunc ( dest )
2021-07-17 16:06:29 +00:00
} catch ( err ) {
if ( err . code === 'ENOENT' ) return { srcStat , destStat : null }
throw err
}
return { srcStat , destStat }
}
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
function checkPaths ( src , dest , funcName , opts , cb ) {
util . callbackify ( getStats ) ( src , dest , opts , ( err , stats ) => {
2021-07-17 16:06:29 +00:00
if ( err ) return cb ( err )
const { srcStat , destStat } = stats
2021-07-17 17:06:08 +00:00
if ( destStat ) {
if ( areIdentical ( srcStat , destStat ) ) {
const srcBaseName = path . basename ( src )
const destBaseName = path . basename ( dest )
if ( funcName === 'move' &&
srcBaseName !== destBaseName &&
srcBaseName . toLowerCase ( ) === destBaseName . toLowerCase ( ) ) {
return cb ( null , { srcStat , destStat , isChangingCase : true } )
}
return cb ( new Error ( 'Source and destination must not be the same.' ) )
}
if ( srcStat . isDirectory ( ) && ! destStat . isDirectory ( ) ) {
return cb ( new Error ( ` Cannot overwrite non-directory ' ${ dest } ' with directory ' ${ src } '. ` ) )
}
if ( ! srcStat . isDirectory ( ) && destStat . isDirectory ( ) ) {
return cb ( new Error ( ` Cannot overwrite directory ' ${ dest } ' with non-directory ' ${ src } '. ` ) )
}
2021-07-17 16:06:29 +00:00
}
2021-07-17 17:06:08 +00:00
2021-07-17 16:06:29 +00:00
if ( srcStat . isDirectory ( ) && isSrcSubdir ( src , dest ) ) {
return cb ( new Error ( errMsg ( src , dest , funcName ) ) )
}
return cb ( null , { srcStat , destStat } )
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 17:06:08 +00:00
function checkPathsSync ( src , dest , funcName , opts ) {
const { srcStat , destStat } = getStatsSync ( src , dest , opts )
if ( destStat ) {
if ( areIdentical ( srcStat , destStat ) ) {
const srcBaseName = path . basename ( src )
const destBaseName = path . basename ( dest )
if ( funcName === 'move' &&
srcBaseName !== destBaseName &&
srcBaseName . toLowerCase ( ) === destBaseName . toLowerCase ( ) ) {
return { srcStat , destStat , isChangingCase : true }
}
throw new Error ( 'Source and destination must not be the same.' )
}
if ( srcStat . isDirectory ( ) && ! destStat . isDirectory ( ) ) {
throw new Error ( ` Cannot overwrite non-directory ' ${ dest } ' with directory ' ${ src } '. ` )
}
if ( ! srcStat . isDirectory ( ) && destStat . isDirectory ( ) ) {
throw new Error ( ` Cannot overwrite directory ' ${ dest } ' with non-directory ' ${ src } '. ` )
}
2021-07-17 16:06:29 +00:00
}
2021-07-17 17:06:08 +00:00
2021-07-17 16:06:29 +00:00
if ( srcStat . isDirectory ( ) && isSrcSubdir ( src , dest ) ) {
throw new Error ( errMsg ( src , dest , funcName ) )
}
return { srcStat , destStat }
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// recursively check if dest parent is a subdirectory of src.
// It works for all file types including symlinks since it
// checks the src and dest inodes. It starts from the deepest
// parent and stops once it reaches the src parent or the root path.
function checkParentPaths ( src , srcStat , dest , funcName , cb ) {
const srcParent = path . resolve ( path . dirname ( src ) )
const destParent = path . resolve ( path . dirname ( dest ) )
if ( destParent === srcParent || destParent === path . parse ( destParent ) . root ) return cb ( )
2021-07-17 17:06:08 +00:00
fs . stat ( destParent , { bigint : true } , ( err , destStat ) => {
2021-07-17 16:06:29 +00:00
if ( err ) {
if ( err . code === 'ENOENT' ) return cb ( )
return cb ( err )
}
if ( areIdentical ( srcStat , destStat ) ) {
return cb ( new Error ( errMsg ( src , dest , funcName ) ) )
}
return checkParentPaths ( src , srcStat , destParent , funcName , cb )
2021-07-17 17:06:08 +00:00
} )
2021-07-17 16:06:29 +00:00
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function checkParentPathsSync ( src , srcStat , dest , funcName ) {
const srcParent = path . resolve ( path . dirname ( src ) )
const destParent = path . resolve ( path . dirname ( dest ) )
if ( destParent === srcParent || destParent === path . parse ( destParent ) . root ) return
let destStat
try {
2021-07-17 17:06:08 +00:00
destStat = fs . statSync ( destParent , { bigint : true } )
2021-07-17 16:06:29 +00:00
} catch ( err ) {
if ( err . code === 'ENOENT' ) return
throw err
}
if ( areIdentical ( srcStat , destStat ) ) {
throw new Error ( errMsg ( src , dest , funcName ) )
}
return checkParentPathsSync ( src , srcStat , destParent , funcName )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function areIdentical ( srcStat , destStat ) {
2021-07-17 17:06:08 +00:00
return destStat . ino && destStat . dev && destStat . ino === srcStat . ino && destStat . dev === srcStat . dev
2021-07-17 16:06:29 +00:00
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// return true if dest is a subdir of src, otherwise false.
// It only checks the path strings.
function isSrcSubdir ( src , dest ) {
const srcArr = path . resolve ( src ) . split ( path . sep ) . filter ( i => i )
const destArr = path . resolve ( dest ) . split ( path . sep ) . filter ( i => i )
return srcArr . reduce ( ( acc , cur , i ) => acc && destArr [ i ] === cur , true )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function errMsg ( src , dest , funcName ) {
return ` Cannot ${ funcName } ' ${ src } ' to a subdirectory of itself, ' ${ dest } '. `
}
2021-03-02 23:07:35 +00:00
module . exports = {
2021-07-17 16:06:29 +00:00
checkPaths ,
checkPathsSync ,
checkParentPaths ,
checkParentPathsSync ,
2021-07-17 17:06:08 +00:00
isSrcSubdir ,
areIdentical
2021-03-02 23:07:35 +00:00
}
/***/ } ) ,
2021-07-17 16:06:29 +00:00
/***/ 2548 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
"use strict" ;
2021-07-17 16:06:29 +00:00
const fs = _ _nccwpck _require _ _ ( 7758 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function utimesMillis ( path , atime , mtime , callback ) {
// if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)
fs . open ( path , 'r+' , ( err , fd ) => {
if ( err ) return callback ( err )
fs . futimes ( fd , atime , mtime , futimesErr => {
fs . close ( fd , closeErr => {
if ( callback ) callback ( futimesErr || closeErr )
} )
} )
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function utimesMillisSync ( path , atime , mtime ) {
const fd = fs . openSync ( path , 'r+' )
fs . futimesSync ( fd , atime , mtime )
return fs . closeSync ( fd )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
module . exports = {
utimesMillis ,
utimesMillisSync
}
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2021-07-17 16:06:29 +00:00
/***/ 7356 :
/***/ ( ( module ) => {
2021-03-02 23:07:35 +00:00
"use strict" ;
2021-07-17 16:06:29 +00:00
module . exports = clone
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var getPrototypeOf = Object . getPrototypeOf || function ( obj ) {
return obj . _ _proto _ _
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function clone ( obj ) {
if ( obj === null || typeof obj !== 'object' )
return obj
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( obj instanceof Object )
var copy = { _ _proto _ _ : getPrototypeOf ( obj ) }
else
var copy = Object . create ( null )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
Object . getOwnPropertyNames ( obj ) . forEach ( function ( key ) {
Object . defineProperty ( copy , key , Object . getOwnPropertyDescriptor ( obj , key ) )
} )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
return copy
2021-03-02 23:07:35 +00:00
}
/***/ } ) ,
2021-07-17 16:06:29 +00:00
/***/ 7758 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2022-04-22 03:25:41 +00:00
var fs = _ _nccwpck _require _ _ ( 7147 )
2021-07-17 16:06:29 +00:00
var polyfills = _ _nccwpck _require _ _ ( 263 )
var legacy = _ _nccwpck _require _ _ ( 3086 )
var clone = _ _nccwpck _require _ _ ( 7356 )
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
var util = _ _nccwpck _require _ _ ( 3837 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/* istanbul ignore next - node 0.x polyfill */
var gracefulQueue
var previousSymbol
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/* istanbul ignore else - node 0.x polyfill */
if ( typeof Symbol === 'function' && typeof Symbol . for === 'function' ) {
gracefulQueue = Symbol . for ( 'graceful-fs.queue' )
// This is used in testing by future versions
previousSymbol = Symbol . for ( 'graceful-fs.previous' )
} else {
gracefulQueue = '___graceful-fs.queue'
previousSymbol = '___graceful-fs.previous'
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function noop ( ) { }
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function publishQueue ( context , queue ) {
Object . defineProperty ( context , gracefulQueue , {
get : function ( ) {
return queue
}
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
var debug = noop
if ( util . debuglog )
debug = util . debuglog ( 'gfs4' )
else if ( /\bgfs4\b/i . test ( process . env . NODE _DEBUG || '' ) )
debug = function ( ) {
var m = util . format . apply ( util , arguments )
m = 'GFS4: ' + m . split ( /\n/ ) . join ( '\nGFS4: ' )
console . error ( m )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
// Once time initialization
if ( ! fs [ gracefulQueue ] ) {
// This queue can be shared by multiple loaded instances
var queue = global [ gracefulQueue ] || [ ]
publishQueue ( fs , queue )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// Patch fs.close/closeSync to shared queue version, because we need
// to retry() whenever a close happens *anywhere* in the program.
// This is essential when multiple graceful-fs instances are
// in play at the same time.
fs . close = ( function ( fs$close ) {
function close ( fd , cb ) {
return fs$close . call ( fs , fd , function ( err ) {
// This function uses the graceful-fs shared queue
if ( ! err ) {
2022-04-22 03:25:41 +00:00
resetQueue ( )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
if ( typeof cb === 'function' )
cb . apply ( this , arguments )
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
Object . defineProperty ( close , previousSymbol , {
value : fs$close
} )
return close
} ) ( fs . close )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
fs . closeSync = ( function ( fs$closeSync ) {
function closeSync ( fd ) {
// This function uses the graceful-fs shared queue
fs$closeSync . apply ( fs , arguments )
2022-04-22 03:25:41 +00:00
resetQueue ( )
2021-07-17 16:06:29 +00:00
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
Object . defineProperty ( closeSync , previousSymbol , {
value : fs$closeSync
} )
return closeSync
} ) ( fs . closeSync )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( /\bgfs4\b/i . test ( process . env . NODE _DEBUG || '' ) ) {
process . on ( 'exit' , function ( ) {
debug ( fs [ gracefulQueue ] )
2022-04-22 03:25:41 +00:00
_ _nccwpck _require _ _ ( 9491 ) . equal ( fs [ gracefulQueue ] . length , 0 )
2021-03-02 23:07:35 +00:00
} )
}
2021-07-17 16:06:29 +00:00
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( ! global [ gracefulQueue ] ) {
publishQueue ( global , fs [ gracefulQueue ] ) ;
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
module . exports = patch ( clone ( fs ) )
if ( process . env . TEST _GRACEFUL _FS _GLOBAL _PATCH && ! fs . _ _patched ) {
module . exports = patch ( fs )
fs . _ _patched = true ;
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function patch ( fs ) {
// Everything that references the open() function needs to be in here
polyfills ( fs )
fs . gracefulify = patch
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
fs . createReadStream = createReadStream
fs . createWriteStream = createWriteStream
var fs$readFile = fs . readFile
fs . readFile = readFile
function readFile ( path , options , cb ) {
if ( typeof options === 'function' )
cb = options , options = null
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
return go$readFile ( path , options , cb )
2022-04-22 03:25:41 +00:00
function go$readFile ( path , options , cb , startTime ) {
2021-07-17 16:06:29 +00:00
return fs$readFile ( path , options , function ( err ) {
if ( err && ( err . code === 'EMFILE' || err . code === 'ENFILE' ) )
2022-04-22 03:25:41 +00:00
enqueue ( [ go$readFile , [ path , options , cb ] , err , startTime || Date . now ( ) , Date . now ( ) ] )
2021-07-17 16:06:29 +00:00
else {
if ( typeof cb === 'function' )
cb . apply ( this , arguments )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
} )
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
var fs$writeFile = fs . writeFile
fs . writeFile = writeFile
function writeFile ( path , data , options , cb ) {
if ( typeof options === 'function' )
cb = options , options = null
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
return go$writeFile ( path , data , options , cb )
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
function go$writeFile ( path , data , options , cb , startTime ) {
2021-07-17 16:06:29 +00:00
return fs$writeFile ( path , data , options , function ( err ) {
if ( err && ( err . code === 'EMFILE' || err . code === 'ENFILE' ) )
2022-04-22 03:25:41 +00:00
enqueue ( [ go$writeFile , [ path , data , options , cb ] , err , startTime || Date . now ( ) , Date . now ( ) ] )
2021-07-17 16:06:29 +00:00
else {
if ( typeof cb === 'function' )
cb . apply ( this , arguments )
}
} )
}
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var fs$appendFile = fs . appendFile
if ( fs$appendFile )
fs . appendFile = appendFile
function appendFile ( path , data , options , cb ) {
if ( typeof options === 'function' )
cb = options , options = null
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
return go$appendFile ( path , data , options , cb )
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
function go$appendFile ( path , data , options , cb , startTime ) {
2021-07-17 16:06:29 +00:00
return fs$appendFile ( path , data , options , function ( err ) {
if ( err && ( err . code === 'EMFILE' || err . code === 'ENFILE' ) )
2022-04-22 03:25:41 +00:00
enqueue ( [ go$appendFile , [ path , data , options , cb ] , err , startTime || Date . now ( ) , Date . now ( ) ] )
2021-07-17 16:06:29 +00:00
else {
if ( typeof cb === 'function' )
cb . apply ( this , arguments )
}
} )
}
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var fs$copyFile = fs . copyFile
if ( fs$copyFile )
fs . copyFile = copyFile
function copyFile ( src , dest , flags , cb ) {
if ( typeof flags === 'function' ) {
cb = flags
flags = 0
}
2022-04-22 03:25:41 +00:00
return go$copyFile ( src , dest , flags , cb )
function go$copyFile ( src , dest , flags , cb , startTime ) {
return fs$copyFile ( src , dest , flags , function ( err ) {
if ( err && ( err . code === 'EMFILE' || err . code === 'ENFILE' ) )
enqueue ( [ go$copyFile , [ src , dest , flags , cb ] , err , startTime || Date . now ( ) , Date . now ( ) ] )
else {
if ( typeof cb === 'function' )
cb . apply ( this , arguments )
}
} )
}
2021-07-17 16:06:29 +00:00
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var fs$readdir = fs . readdir
fs . readdir = readdir
2022-04-22 03:25:41 +00:00
var noReaddirOptionVersions = /^v[0-5]\./
2021-07-17 16:06:29 +00:00
function readdir ( path , options , cb ) {
2022-04-22 03:25:41 +00:00
if ( typeof options === 'function' )
cb = options , options = null
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
var go$readdir = noReaddirOptionVersions . test ( process . version )
? function go$readdir ( path , options , cb , startTime ) {
return fs$readdir ( path , fs$readdirCallback (
path , options , cb , startTime
) )
}
: function go$readdir ( path , options , cb , startTime ) {
return fs$readdir ( path , options , fs$readdirCallback (
path , options , cb , startTime
) )
}
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
return go$readdir ( path , options , cb )
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
function fs$readdirCallback ( path , options , cb , startTime ) {
return function ( err , files ) {
if ( err && ( err . code === 'EMFILE' || err . code === 'ENFILE' ) )
enqueue ( [
go$readdir ,
[ path , options , cb ] ,
err ,
startTime || Date . now ( ) ,
Date . now ( )
] )
else {
if ( files && files . sort )
files . sort ( )
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
if ( typeof cb === 'function' )
cb . call ( this , err , files )
}
2021-07-17 16:06:29 +00:00
}
}
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
if ( process . version . substr ( 0 , 4 ) === 'v0.8' ) {
var legStreams = legacy ( fs )
ReadStream = legStreams . ReadStream
WriteStream = legStreams . WriteStream
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
var fs$ReadStream = fs . ReadStream
if ( fs$ReadStream ) {
ReadStream . prototype = Object . create ( fs$ReadStream . prototype )
ReadStream . prototype . open = ReadStream$open
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var fs$WriteStream = fs . WriteStream
if ( fs$WriteStream ) {
WriteStream . prototype = Object . create ( fs$WriteStream . prototype )
WriteStream . prototype . open = WriteStream$open
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
Object . defineProperty ( fs , 'ReadStream' , {
get : function ( ) {
return ReadStream
} ,
set : function ( val ) {
ReadStream = val
} ,
enumerable : true ,
configurable : true
} )
Object . defineProperty ( fs , 'WriteStream' , {
get : function ( ) {
return WriteStream
} ,
set : function ( val ) {
WriteStream = val
} ,
enumerable : true ,
configurable : true
} )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// legacy names
var FileReadStream = ReadStream
Object . defineProperty ( fs , 'FileReadStream' , {
get : function ( ) {
return FileReadStream
} ,
set : function ( val ) {
FileReadStream = val
} ,
enumerable : true ,
configurable : true
} )
var FileWriteStream = WriteStream
Object . defineProperty ( fs , 'FileWriteStream' , {
get : function ( ) {
return FileWriteStream
} ,
set : function ( val ) {
FileWriteStream = val
} ,
enumerable : true ,
configurable : true
} )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function ReadStream ( path , options ) {
if ( this instanceof ReadStream )
return fs$ReadStream . apply ( this , arguments ) , this
else
return ReadStream . apply ( Object . create ( ReadStream . prototype ) , arguments )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function ReadStream$open ( ) {
var that = this
open ( that . path , that . flags , that . mode , function ( err , fd ) {
if ( err ) {
if ( that . autoClose )
that . destroy ( )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
that . emit ( 'error' , err )
} else {
that . fd = fd
that . emit ( 'open' , fd )
that . read ( )
}
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function WriteStream ( path , options ) {
if ( this instanceof WriteStream )
return fs$WriteStream . apply ( this , arguments ) , this
else
return WriteStream . apply ( Object . create ( WriteStream . prototype ) , arguments )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function WriteStream$open ( ) {
var that = this
open ( that . path , that . flags , that . mode , function ( err , fd ) {
if ( err ) {
that . destroy ( )
that . emit ( 'error' , err )
} else {
that . fd = fd
that . emit ( 'open' , fd )
}
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function createReadStream ( path , options ) {
return new fs . ReadStream ( path , options )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function createWriteStream ( path , options ) {
return new fs . WriteStream ( path , options )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
var fs$open = fs . open
fs . open = open
function open ( path , flags , mode , cb ) {
if ( typeof mode === 'function' )
cb = mode , mode = null
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
return go$open ( path , flags , mode , cb )
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
function go$open ( path , flags , mode , cb , startTime ) {
2021-07-17 16:06:29 +00:00
return fs$open ( path , flags , mode , function ( err , fd ) {
if ( err && ( err . code === 'EMFILE' || err . code === 'ENFILE' ) )
2022-04-22 03:25:41 +00:00
enqueue ( [ go$open , [ path , flags , mode , cb ] , err , startTime || Date . now ( ) , Date . now ( ) ] )
2021-07-17 16:06:29 +00:00
else {
if ( typeof cb === 'function' )
cb . apply ( this , arguments )
}
} )
}
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
return fs
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function enqueue ( elem ) {
debug ( 'ENQUEUE' , elem [ 0 ] . name , elem [ 1 ] )
fs [ gracefulQueue ] . push ( elem )
2022-04-22 03:25:41 +00:00
retry ( )
}
// keep track of the timeout between retry() calls
var retryTimer
// reset the startTime and lastTime to now
// this resets the start of the 60 second overall timeout as well as the
// delay between attempts so that we'll retry these jobs sooner
function resetQueue ( ) {
var now = Date . now ( )
for ( var i = 0 ; i < fs [ gracefulQueue ] . length ; ++ i ) {
// entries that are only a length of 2 are from an older version, don't
// bother modifying those since they'll be retried anyway.
if ( fs [ gracefulQueue ] [ i ] . length > 2 ) {
fs [ gracefulQueue ] [ i ] [ 3 ] = now // startTime
fs [ gracefulQueue ] [ i ] [ 4 ] = now // lastTime
}
}
// call retry to make sure we're actively processing the queue
retry ( )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function retry ( ) {
2022-04-22 03:25:41 +00:00
// clear the timer and remove it to help prevent unintended concurrency
clearTimeout ( retryTimer )
retryTimer = undefined
if ( fs [ gracefulQueue ] . length === 0 )
return
2021-07-17 16:06:29 +00:00
var elem = fs [ gracefulQueue ] . shift ( )
2022-04-22 03:25:41 +00:00
var fn = elem [ 0 ]
var args = elem [ 1 ]
// these items may be unset if they were added by an older graceful-fs
var err = elem [ 2 ]
var startTime = elem [ 3 ]
var lastTime = elem [ 4 ]
// if we don't have a startTime we have no way of knowing if we've waited
// long enough, so go ahead and retry this item now
if ( startTime === undefined ) {
debug ( 'RETRY' , fn . name , args )
fn . apply ( null , args )
} else if ( Date . now ( ) - startTime >= 60000 ) {
// it's been more than 60 seconds total, bail now
debug ( 'TIMEOUT' , fn . name , args )
var cb = args . pop ( )
if ( typeof cb === 'function' )
cb . call ( null , err )
} else {
// the amount of time between the last attempt and right now
var sinceAttempt = Date . now ( ) - lastTime
// the amount of time between when we first tried, and when we last tried
// rounded up to at least 1
var sinceStart = Math . max ( lastTime - startTime , 1 )
// backoff. wait longer than the total time we've been retrying, but only
// up to a maximum of 100ms
var desiredDelay = Math . min ( sinceStart * 1.2 , 100 )
// it's been long enough since the last retry, do it again
if ( sinceAttempt >= desiredDelay ) {
debug ( 'RETRY' , fn . name , args )
fn . apply ( null , args . concat ( [ startTime ] ) )
} else {
// if we can't do this job yet, push it to the end of the queue
// and let the next iteration check again
fs [ gracefulQueue ] . push ( elem )
}
}
// schedule our next run if one isn't already scheduled
if ( retryTimer === undefined ) {
retryTimer = setTimeout ( retry , 0 )
2021-03-02 23:07:35 +00:00
}
}
/***/ } ) ,
2021-07-17 16:06:29 +00:00
/***/ 3086 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2022-04-22 03:25:41 +00:00
var Stream = ( _ _nccwpck _require _ _ ( 2781 ) . Stream )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
module . exports = legacy
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function legacy ( fs ) {
return {
ReadStream : ReadStream ,
WriteStream : WriteStream
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function ReadStream ( path , options ) {
if ( ! ( this instanceof ReadStream ) ) return new ReadStream ( path , options ) ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
Stream . call ( this ) ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var self = this ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
this . path = path ;
this . fd = null ;
this . readable = true ;
this . paused = false ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
this . flags = 'r' ;
this . mode = 438 ; /*=0666*/
this . bufferSize = 64 * 1024 ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
options = options || { } ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// Mixin options into this
var keys = Object . keys ( options ) ;
for ( var index = 0 , length = keys . length ; index < length ; index ++ ) {
var key = keys [ index ] ;
this [ key ] = options [ key ] ;
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( this . encoding ) this . setEncoding ( this . encoding ) ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( this . start !== undefined ) {
if ( 'number' !== typeof this . start ) {
throw TypeError ( 'start must be a Number' ) ;
}
if ( this . end === undefined ) {
this . end = Infinity ;
} else if ( 'number' !== typeof this . end ) {
throw TypeError ( 'end must be a Number' ) ;
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( this . start > this . end ) {
throw new Error ( 'start must be <= end' ) ;
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
this . pos = this . start ;
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( this . fd !== null ) {
process . nextTick ( function ( ) {
self . _read ( ) ;
} ) ;
return ;
}
fs . open ( this . path , this . flags , this . mode , function ( err , fd ) {
if ( err ) {
self . emit ( 'error' , err ) ;
self . readable = false ;
return ;
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
self . fd = fd ;
self . emit ( 'open' , fd ) ;
self . _read ( ) ;
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function WriteStream ( path , options ) {
if ( ! ( this instanceof WriteStream ) ) return new WriteStream ( path , options ) ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
Stream . call ( this ) ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
this . path = path ;
this . fd = null ;
this . writable = true ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
this . flags = 'w' ;
this . encoding = 'binary' ;
this . mode = 438 ; /*=0666*/
this . bytesWritten = 0 ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
options = options || { } ;
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// Mixin options into this
var keys = Object . keys ( options ) ;
for ( var index = 0 , length = keys . length ; index < length ; index ++ ) {
var key = keys [ index ] ;
this [ key ] = options [ key ] ;
}
if ( this . start !== undefined ) {
if ( 'number' !== typeof this . start ) {
throw TypeError ( 'start must be a Number' ) ;
}
if ( this . start < 0 ) {
throw new Error ( 'start must be >= zero' ) ;
}
this . pos = this . start ;
}
this . busy = false ;
this . _queue = [ ] ;
if ( this . fd === null ) {
this . _open = fs . open ;
this . _queue . push ( [ this . _open , this . path , this . flags , this . mode , undefined ] ) ;
this . flush ( ) ;
}
}
2021-03-02 23:07:35 +00:00
}
/***/ } ) ,
2021-07-17 16:06:29 +00:00
/***/ 263 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2022-04-22 03:25:41 +00:00
var constants = _ _nccwpck _require _ _ ( 2057 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var origCwd = process . cwd
var cwd = null
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var platform = process . env . GRACEFUL _FS _PLATFORM || process . platform
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
process . cwd = function ( ) {
if ( ! cwd )
cwd = origCwd . call ( process )
return cwd
}
try {
process . cwd ( )
} catch ( er ) { }
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// This check is needed until node.js 12 is required
if ( typeof process . chdir === 'function' ) {
var chdir = process . chdir
process . chdir = function ( d ) {
cwd = null
chdir . call ( process , d )
}
if ( Object . setPrototypeOf ) Object . setPrototypeOf ( process . chdir , chdir )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
module . exports = patch
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function patch ( fs ) {
// (re-)implement some things that are known busted or missing.
// lchmod, broken prior to 0.6.2
// back-port the fix here.
if ( constants . hasOwnProperty ( 'O_SYMLINK' ) &&
process . version . match ( /^v0\.6\.[0-2]|^v0\.5\./ ) ) {
patchLchmod ( fs )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
// lutimes implementation, or no-op
if ( ! fs . lutimes ) {
patchLutimes ( fs )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// https://github.com/isaacs/node-graceful-fs/issues/4
// Chown should not fail on einval or eperm if non-root.
// It should not fail on enosys ever, as this just indicates
// that a fs doesn't support the intended operation.
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
fs . chown = chownFix ( fs . chown )
fs . fchown = chownFix ( fs . fchown )
fs . lchown = chownFix ( fs . lchown )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
fs . chmod = chmodFix ( fs . chmod )
fs . fchmod = chmodFix ( fs . fchmod )
fs . lchmod = chmodFix ( fs . lchmod )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
fs . chownSync = chownFixSync ( fs . chownSync )
fs . fchownSync = chownFixSync ( fs . fchownSync )
fs . lchownSync = chownFixSync ( fs . lchownSync )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
fs . chmodSync = chmodFixSync ( fs . chmodSync )
fs . fchmodSync = chmodFixSync ( fs . fchmodSync )
fs . lchmodSync = chmodFixSync ( fs . lchmodSync )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
fs . stat = statFix ( fs . stat )
fs . fstat = statFix ( fs . fstat )
fs . lstat = statFix ( fs . lstat )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
fs . statSync = statFixSync ( fs . statSync )
fs . fstatSync = statFixSync ( fs . fstatSync )
fs . lstatSync = statFixSync ( fs . lstatSync )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// if lchmod/lchown do not exist, then make them no-ops
2022-04-22 03:25:41 +00:00
if ( fs . chmod && ! fs . lchmod ) {
2021-07-17 16:06:29 +00:00
fs . lchmod = function ( path , mode , cb ) {
if ( cb ) process . nextTick ( cb )
}
fs . lchmodSync = function ( ) { }
}
2022-04-22 03:25:41 +00:00
if ( fs . chown && ! fs . lchown ) {
2021-07-17 16:06:29 +00:00
fs . lchown = function ( path , uid , gid , cb ) {
if ( cb ) process . nextTick ( cb )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
fs . lchownSync = function ( ) { }
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// on Windows, A/V software can lock the directory, causing this
// to fail with an EACCES or EPERM if the directory contains newly
// created files. Try again on failure, for up to 60 seconds.
// Set the timeout this long because some Windows Anti-Virus, such as Parity
// bit9, may lock files for up to a minute, causing npm package install
// failures. Also, take care to yield the scheduler. Windows scheduling gives
// CPU to a busy looping process, which can cause the program causing the lock
// contention to be starved of CPU by node, so the contention doesn't resolve.
if ( platform === "win32" ) {
2022-04-22 03:25:41 +00:00
fs . rename = typeof fs . rename !== 'function' ? fs . rename
: ( function ( fs$rename ) {
function rename ( from , to , cb ) {
var start = Date . now ( )
var backoff = 0 ;
fs$rename ( from , to , function CB ( er ) {
if ( er
&& ( er . code === "EACCES" || er . code === "EPERM" )
&& Date . now ( ) - start < 60000 ) {
setTimeout ( function ( ) {
fs . stat ( to , function ( stater , st ) {
if ( stater && stater . code === "ENOENT" )
fs$rename ( from , to , CB ) ;
else
cb ( er )
} )
} , backoff )
if ( backoff < 100 )
backoff += 10 ;
return ;
}
if ( cb ) cb ( er )
} )
}
if ( Object . setPrototypeOf ) Object . setPrototypeOf ( rename , fs$rename )
return rename
} ) ( fs . rename )
2021-07-17 16:06:29 +00:00
}
// if read() returns EAGAIN, then just try it again.
2022-04-22 03:25:41 +00:00
fs . read = typeof fs . read !== 'function' ? fs . read
: ( function ( fs$read ) {
2021-07-17 16:06:29 +00:00
function read ( fd , buffer , offset , length , position , callback _ ) {
var callback
if ( callback _ && typeof callback _ === 'function' ) {
var eagCounter = 0
callback = function ( er , _ , _ _ ) {
if ( er && er . code === 'EAGAIN' && eagCounter < 10 ) {
eagCounter ++
return fs$read . call ( fs , fd , buffer , offset , length , position , callback )
}
callback _ . apply ( this , arguments )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
}
return fs$read . call ( fs , fd , buffer , offset , length , position , callback )
}
// This ensures `util.promisify` works as it does for native `fs.read`.
if ( Object . setPrototypeOf ) Object . setPrototypeOf ( read , fs$read )
return read
} ) ( fs . read )
2022-04-22 03:25:41 +00:00
fs . readSync = typeof fs . readSync !== 'function' ? fs . readSync
: ( function ( fs$readSync ) { return function ( fd , buffer , offset , length , position ) {
2021-07-17 16:06:29 +00:00
var eagCounter = 0
while ( true ) {
try {
return fs$readSync . call ( fs , fd , buffer , offset , length , position )
} catch ( er ) {
if ( er . code === 'EAGAIN' && eagCounter < 10 ) {
eagCounter ++
continue
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
throw er
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
}
} } ) ( fs . readSync )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function patchLchmod ( fs ) {
fs . lchmod = function ( path , mode , callback ) {
fs . open ( path
, constants . O _WRONLY | constants . O _SYMLINK
, mode
, function ( err , fd ) {
if ( err ) {
if ( callback ) callback ( err )
return
}
// prefer to return the chmod error, if one occurs,
// but still try to close, and report closing errors if they occur.
fs . fchmod ( fd , mode , function ( err ) {
fs . close ( fd , function ( err2 ) {
if ( callback ) callback ( err || err2 )
} )
} )
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
fs . lchmodSync = function ( path , mode ) {
var fd = fs . openSync ( path , constants . O _WRONLY | constants . O _SYMLINK , mode )
// prefer to return the chmod error, if one occurs,
// but still try to close, and report closing errors if they occur.
var threw = true
var ret
try {
ret = fs . fchmodSync ( fd , mode )
threw = false
} finally {
if ( threw ) {
try {
fs . closeSync ( fd )
} catch ( er ) { }
2021-03-02 23:07:35 +00:00
} else {
2021-07-17 16:06:29 +00:00
fs . closeSync ( fd )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
}
return ret
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function patchLutimes ( fs ) {
2022-04-22 03:25:41 +00:00
if ( constants . hasOwnProperty ( "O_SYMLINK" ) && fs . futimes ) {
2021-07-17 16:06:29 +00:00
fs . lutimes = function ( path , at , mt , cb ) {
fs . open ( path , constants . O _SYMLINK , function ( er , fd ) {
if ( er ) {
if ( cb ) cb ( er )
return
}
fs . futimes ( fd , at , mt , function ( er ) {
fs . close ( fd , function ( er2 ) {
if ( cb ) cb ( er || er2 )
} )
} )
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
fs . lutimesSync = function ( path , at , mt ) {
var fd = fs . openSync ( path , constants . O _SYMLINK )
var ret
var threw = true
try {
ret = fs . futimesSync ( fd , at , mt )
threw = false
} finally {
if ( threw ) {
try {
fs . closeSync ( fd )
} catch ( er ) { }
} else {
fs . closeSync ( fd )
}
}
return ret
}
2021-03-02 23:07:35 +00:00
2022-04-22 03:25:41 +00:00
} else if ( fs . futimes ) {
2021-07-17 16:06:29 +00:00
fs . lutimes = function ( _a , _b , _c , cb ) { if ( cb ) process . nextTick ( cb ) }
fs . lutimesSync = function ( ) { }
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
function chmodFix ( orig ) {
if ( ! orig ) return orig
return function ( target , mode , cb ) {
return orig . call ( fs , target , mode , function ( er ) {
if ( chownErOk ( er ) ) er = null
if ( cb ) cb . apply ( this , arguments )
} )
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
function chmodFixSync ( orig ) {
if ( ! orig ) return orig
return function ( target , mode ) {
try {
return orig . call ( fs , target , mode )
} catch ( er ) {
if ( ! chownErOk ( er ) ) throw er
}
}
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function chownFix ( orig ) {
if ( ! orig ) return orig
return function ( target , uid , gid , cb ) {
return orig . call ( fs , target , uid , gid , function ( er ) {
if ( chownErOk ( er ) ) er = null
if ( cb ) cb . apply ( this , arguments )
} )
}
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function chownFixSync ( orig ) {
if ( ! orig ) return orig
return function ( target , uid , gid ) {
try {
return orig . call ( fs , target , uid , gid )
} catch ( er ) {
if ( ! chownErOk ( er ) ) throw er
}
}
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function statFix ( orig ) {
if ( ! orig ) return orig
// Older versions of Node erroneously returned signed integers for
// uid + gid.
return function ( target , options , cb ) {
if ( typeof options === 'function' ) {
cb = options
options = null
}
function callback ( er , stats ) {
if ( stats ) {
if ( stats . uid < 0 ) stats . uid += 0x100000000
if ( stats . gid < 0 ) stats . gid += 0x100000000
}
if ( cb ) cb . apply ( this , arguments )
}
return options ? orig . call ( fs , target , options , callback )
: orig . call ( fs , target , callback )
}
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function statFixSync ( orig ) {
if ( ! orig ) return orig
// Older versions of Node erroneously returned signed integers for
// uid + gid.
return function ( target , options ) {
var stats = options ? orig . call ( fs , target , options )
: orig . call ( fs , target )
2022-04-22 03:25:41 +00:00
if ( stats ) {
if ( stats . uid < 0 ) stats . uid += 0x100000000
if ( stats . gid < 0 ) stats . gid += 0x100000000
}
2021-07-17 16:06:29 +00:00
return stats ;
}
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// ENOSYS means that the fs doesn't support the op. Just ignore
// that, because it doesn't matter.
//
// if there's no getuid, or if getuid() is something other
// than 0, and the error is EINVAL or EPERM, then just ignore
// it.
//
// This specific case is a silent failure in cp, install, tar,
// and most other unix tools that manage permissions.
//
// When running as root, or if other types of errors are
// encountered, then it's strict.
function chownErOk ( er ) {
if ( ! er )
return true
if ( er . code === "ENOSYS" )
return true
var nonroot = ! process . getuid || process . getuid ( ) !== 0
if ( nonroot ) {
if ( er . code === "EINVAL" || er . code === "EPERM" )
return true
}
return false
}
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 6160 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
let _fs
try {
_fs = _ _nccwpck _require _ _ ( 7758 )
} catch ( _ ) {
2022-04-22 03:25:41 +00:00
_fs = _ _nccwpck _require _ _ ( 7147 )
2021-07-17 16:06:29 +00:00
}
const universalify = _ _nccwpck _require _ _ ( 9046 )
const { stringify , stripBom } = _ _nccwpck _require _ _ ( 5902 )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
async function _readFile ( file , options = { } ) {
if ( typeof options === 'string' ) {
options = { encoding : options }
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
const fs = options . fs || _fs
const shouldThrow = 'throws' in options ? options . throws : true
let data = await universalify . fromCallback ( fs . readFile ) ( file , options )
data = stripBom ( data )
let obj
2021-03-02 23:07:35 +00:00
try {
2021-07-17 16:06:29 +00:00
obj = JSON . parse ( data , options ? options . reviver : null )
} catch ( err ) {
if ( shouldThrow ) {
err . message = ` ${ file } : ${ err . message } `
throw err
2021-03-02 23:07:35 +00:00
} else {
2021-07-17 16:06:29 +00:00
return null
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
return obj
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
const readFile = universalify . fromPromise ( _readFile )
function readFileSync ( file , options = { } ) {
if ( typeof options === 'string' ) {
options = { encoding : options }
}
const fs = options . fs || _fs
const shouldThrow = 'throws' in options ? options . throws : true
2021-03-02 23:07:35 +00:00
try {
2021-07-17 16:06:29 +00:00
let content = fs . readFileSync ( file , options )
content = stripBom ( content )
return JSON . parse ( content , options . reviver )
} catch ( err ) {
if ( shouldThrow ) {
err . message = ` ${ file } : ${ err . message } `
throw err
} else {
return null
2021-03-02 23:07:35 +00:00
}
}
}
2021-07-17 16:06:29 +00:00
async function _writeFile ( file , obj , options = { } ) {
const fs = options . fs || _fs
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const str = stringify ( obj , options )
await universalify . fromCallback ( fs . writeFile ) ( file , str , options )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
const writeFile = universalify . fromPromise ( _writeFile )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function writeFileSync ( file , obj , options = { } ) {
const fs = options . fs || _fs
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const str = stringify ( obj , options )
// not sure if fs.writeFileSync returns anything, but just in case
return fs . writeFileSync ( file , str , options )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
const jsonfile = {
readFile ,
readFileSync ,
writeFile ,
writeFileSync
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
module . exports = jsonfile
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 5902 :
/***/ ( ( module ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function stringify ( obj , { EOL = '\n' , finalEOL = true , replacer = null , spaces } = { } ) {
const EOF = finalEOL ? EOL : ''
const str = JSON . stringify ( obj , replacer , spaces )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
return str . replace ( /\n/g , EOL ) + EOF
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
function stripBom ( content ) {
// we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified
if ( Buffer . isBuffer ( content ) ) content = content . toString ( 'utf8' )
return content . replace ( /^\uFEFF/ , '' )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
module . exports = { stringify , stripBom }
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
/***/ 5911 :
/***/ ( ( module , exports ) => {
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports = module . exports = SemVer
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
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 ( ) { }
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
// 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'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var MAX _LENGTH = 256
var MAX _SAFE _INTEGER = Number . MAX _SAFE _INTEGER ||
/* istanbul ignore next */ 9007199254740991
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// Max safe segment length for coercion.
var MAX _SAFE _COMPONENT _LENGTH = 16
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// The actual regexps go on exports.re
var re = exports . re = [ ]
var src = exports . src = [ ]
var t = exports . tokens = { }
var R = 0
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function tok ( n ) {
t [ n ] = R ++
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
// The following Regular Expressions can be used for tokenizing,
// validating, and parsing SemVer version strings.
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// ## Numeric Identifier
// A single `0`, or a non-zero digit followed by zero or more digits.
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'NUMERICIDENTIFIER' )
src [ t . NUMERICIDENTIFIER ] = '0|[1-9]\\d*'
tok ( 'NUMERICIDENTIFIERLOOSE' )
src [ t . NUMERICIDENTIFIERLOOSE ] = '[0-9]+'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// ## Non-numeric Identifier
// Zero or more digits, followed by a letter or hyphen, and then zero or
// more letters, digits, or hyphens.
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'NONNUMERICIDENTIFIER' )
src [ t . NONNUMERICIDENTIFIER ] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// ## Main Version
// Three dot-separated numeric identifiers.
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'MAINVERSION' )
src [ t . MAINVERSION ] = '(' + src [ t . NUMERICIDENTIFIER ] + ')\\.' +
'(' + src [ t . NUMERICIDENTIFIER ] + ')\\.' +
'(' + src [ t . NUMERICIDENTIFIER ] + ')'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'MAINVERSIONLOOSE' )
src [ t . MAINVERSIONLOOSE ] = '(' + src [ t . NUMERICIDENTIFIERLOOSE ] + ')\\.' +
'(' + src [ t . NUMERICIDENTIFIERLOOSE ] + ')\\.' +
'(' + src [ t . NUMERICIDENTIFIERLOOSE ] + ')'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// ## Pre-release Version Identifier
// A numeric identifier, or a non-numeric identifier.
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'PRERELEASEIDENTIFIER' )
src [ t . PRERELEASEIDENTIFIER ] = '(?:' + src [ t . NUMERICIDENTIFIER ] +
'|' + src [ t . NONNUMERICIDENTIFIER ] + ')'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'PRERELEASEIDENTIFIERLOOSE' )
src [ t . PRERELEASEIDENTIFIERLOOSE ] = '(?:' + src [ t . NUMERICIDENTIFIERLOOSE ] +
'|' + src [ t . NONNUMERICIDENTIFIER ] + ')'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// ## Pre-release Version
// Hyphen, followed by one or more dot-separated pre-release version
// identifiers.
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'PRERELEASE' )
src [ t . PRERELEASE ] = '(?:-(' + src [ t . PRERELEASEIDENTIFIER ] +
'(?:\\.' + src [ t . PRERELEASEIDENTIFIER ] + ')*))'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'PRERELEASELOOSE' )
src [ t . PRERELEASELOOSE ] = '(?:-?(' + src [ t . PRERELEASEIDENTIFIERLOOSE ] +
'(?:\\.' + src [ t . PRERELEASEIDENTIFIERLOOSE ] + ')*))'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// ## Build Metadata Identifier
// Any combination of digits, letters, or hyphens.
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'BUILDIDENTIFIER' )
src [ t . BUILDIDENTIFIER ] = '[0-9A-Za-z-]+'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// ## Build Metadata
// Plus sign, followed by one or more period-separated build metadata
// identifiers.
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'BUILD' )
src [ t . BUILD ] = '(?:\\+(' + src [ t . BUILDIDENTIFIER ] +
'(?:\\.' + src [ t . BUILDIDENTIFIER ] + ')*))'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// ## Full Version String
// A main version, followed optionally by a pre-release version and
// build metadata.
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// 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.
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'FULL' )
tok ( 'FULLPLAIN' )
src [ t . FULLPLAIN ] = 'v?' + src [ t . MAINVERSION ] +
src [ t . PRERELEASE ] + '?' +
src [ t . BUILD ] + '?'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
src [ t . FULL ] = '^' + src [ t . FULLPLAIN ] + '$'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// 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.
tok ( 'LOOSEPLAIN' )
src [ t . LOOSEPLAIN ] = '[v=\\s]*' + src [ t . MAINVERSIONLOOSE ] +
src [ t . PRERELEASELOOSE ] + '?' +
src [ t . BUILD ] + '?'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'LOOSE' )
src [ t . LOOSE ] = '^' + src [ t . LOOSEPLAIN ] + '$'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'GTLT' )
src [ t . GTLT ] = '((?:<|>)?=?)'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// 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.
tok ( 'XRANGEIDENTIFIERLOOSE' )
src [ t . XRANGEIDENTIFIERLOOSE ] = src [ t . NUMERICIDENTIFIERLOOSE ] + '|x|X|\\*'
tok ( 'XRANGEIDENTIFIER' )
src [ t . XRANGEIDENTIFIER ] = src [ t . NUMERICIDENTIFIER ] + '|x|X|\\*'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'XRANGEPLAIN' )
src [ t . XRANGEPLAIN ] = '[v=\\s]*(' + src [ t . XRANGEIDENTIFIER ] + ')' +
'(?:\\.(' + src [ t . XRANGEIDENTIFIER ] + ')' +
'(?:\\.(' + src [ t . XRANGEIDENTIFIER ] + ')' +
'(?:' + src [ t . PRERELEASE ] + ')?' +
src [ t . BUILD ] + '?' +
')?)?'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'XRANGEPLAINLOOSE' )
src [ t . XRANGEPLAINLOOSE ] = '[v=\\s]*(' + src [ t . XRANGEIDENTIFIERLOOSE ] + ')' +
'(?:\\.(' + src [ t . XRANGEIDENTIFIERLOOSE ] + ')' +
'(?:\\.(' + src [ t . XRANGEIDENTIFIERLOOSE ] + ')' +
'(?:' + src [ t . PRERELEASELOOSE ] + ')?' +
src [ t . BUILD ] + '?' +
')?)?'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'XRANGE' )
src [ t . XRANGE ] = '^' + src [ t . GTLT ] + '\\s*' + src [ t . XRANGEPLAIN ] + '$'
tok ( 'XRANGELOOSE' )
src [ t . XRANGELOOSE ] = '^' + src [ t . GTLT ] + '\\s*' + src [ t . XRANGEPLAINLOOSE ] + '$'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// Coercion.
// Extract anything that could conceivably be a part of a valid semver
tok ( 'COERCE' )
src [ t . COERCE ] = '(^|[^\\d])' +
'(\\d{1,' + MAX _SAFE _COMPONENT _LENGTH + '})' +
'(?:\\.(\\d{1,' + MAX _SAFE _COMPONENT _LENGTH + '}))?' +
'(?:\\.(\\d{1,' + MAX _SAFE _COMPONENT _LENGTH + '}))?' +
'(?:$|[^\\d])'
tok ( 'COERCERTL' )
re [ t . COERCERTL ] = new RegExp ( src [ t . COERCE ] , 'g' )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// Tilde ranges.
// Meaning is "reasonably at or greater than"
tok ( 'LONETILDE' )
src [ t . LONETILDE ] = '(?:~>?)'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'TILDETRIM' )
src [ t . TILDETRIM ] = '(\\s*)' + src [ t . LONETILDE ] + '\\s+'
re [ t . TILDETRIM ] = new RegExp ( src [ t . TILDETRIM ] , 'g' )
var tildeTrimReplace = '$1~'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'TILDE' )
src [ t . TILDE ] = '^' + src [ t . LONETILDE ] + src [ t . XRANGEPLAIN ] + '$'
tok ( 'TILDELOOSE' )
src [ t . TILDELOOSE ] = '^' + src [ t . LONETILDE ] + src [ t . XRANGEPLAINLOOSE ] + '$'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// Caret ranges.
// Meaning is "at least and backwards compatible with"
tok ( 'LONECARET' )
src [ t . LONECARET ] = '(?:\\^)'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'CARETTRIM' )
src [ t . CARETTRIM ] = '(\\s*)' + src [ t . LONECARET ] + '\\s+'
re [ t . CARETTRIM ] = new RegExp ( src [ t . CARETTRIM ] , 'g' )
var caretTrimReplace = '$1^'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'CARET' )
src [ t . CARET ] = '^' + src [ t . LONECARET ] + src [ t . XRANGEPLAIN ] + '$'
tok ( 'CARETLOOSE' )
src [ t . CARETLOOSE ] = '^' + src [ t . LONECARET ] + src [ t . XRANGEPLAINLOOSE ] + '$'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// A simple gt/lt/eq thing, or just "" to indicate "any version"
tok ( 'COMPARATORLOOSE' )
src [ t . COMPARATORLOOSE ] = '^' + src [ t . GTLT ] + '\\s*(' + src [ t . LOOSEPLAIN ] + ')$|^$'
tok ( 'COMPARATOR' )
src [ t . COMPARATOR ] = '^' + src [ t . GTLT ] + '\\s*(' + src [ t . FULLPLAIN ] + ')$|^$'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// An expression to strip any whitespace between the gtlt and the thing
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
tok ( 'COMPARATORTRIM' )
src [ t . COMPARATORTRIM ] = '(\\s*)' + src [ t . GTLT ] +
'\\s*(' + src [ t . LOOSEPLAIN ] + '|' + src [ t . XRANGEPLAIN ] + ')'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// this one has to use the /g flag
re [ t . COMPARATORTRIM ] = new RegExp ( src [ t . COMPARATORTRIM ] , 'g' )
var comparatorTrimReplace = '$1$2$3'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// 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.
tok ( 'HYPHENRANGE' )
src [ t . HYPHENRANGE ] = '^\\s*(' + src [ t . XRANGEPLAIN ] + ')' +
'\\s+-\\s+' +
'(' + src [ t . XRANGEPLAIN ] + ')' +
'\\s*$'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
tok ( 'HYPHENRANGELOOSE' )
src [ t . HYPHENRANGELOOSE ] = '^\\s*(' + src [ t . XRANGEPLAINLOOSE ] + ')' +
'\\s+-\\s+' +
'(' + src [ t . XRANGEPLAINLOOSE ] + ')' +
'\\s*$'
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// Star ranges basically just allow anything at all.
tok ( 'STAR' )
src [ t . 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
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
if ( version instanceof SemVer ) {
return version
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( typeof version !== 'string' ) {
return null
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
if ( version . length > MAX _LENGTH ) {
return null
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var r = options . loose ? re [ t . LOOSE ] : re [ t . FULL ]
if ( ! r . test ( version ) ) {
return null
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
try {
return new SemVer ( version , options )
} catch ( er ) {
return null
}
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . valid = valid
function valid ( version , options ) {
var v = parse ( version , options )
return v ? v . version : null
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . clean = clean
function clean ( version , options ) {
var s = parse ( version . trim ( ) . replace ( /^[=v]+/ , '' ) , options )
return s ? s . version : null
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . SemVer = SemVer
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function SemVer ( version , options ) {
if ( ! options || typeof options !== 'object' ) {
options = {
loose : ! ! options ,
includePrerelease : false
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
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 )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
if ( version . length > MAX _LENGTH ) {
throw new TypeError ( 'version is longer than ' + MAX _LENGTH + ' characters' )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
if ( ! ( this instanceof SemVer ) ) {
return new SemVer ( version , options )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
debug ( 'SemVer' , version , options )
this . options = options
this . loose = ! ! options . loose
var m = version . trim ( ) . match ( options . loose ? re [ t . LOOSE ] : re [ t . FULL ] )
if ( ! m ) {
throw new TypeError ( 'Invalid Version: ' + version )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
this . raw = version
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// these are actually numbers
this . major = + m [ 1 ]
this . minor = + m [ 2 ]
this . patch = + m [ 3 ]
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( this . major > MAX _SAFE _INTEGER || this . major < 0 ) {
throw new TypeError ( 'Invalid major version' )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
if ( this . minor > MAX _SAFE _INTEGER || this . minor < 0 ) {
throw new TypeError ( 'Invalid minor version' )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
if ( this . patch > MAX _SAFE _INTEGER || this . patch < 0 ) {
throw new TypeError ( 'Invalid patch version' )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
// 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
}
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
return id
2021-03-02 23:07:35 +00:00
} )
}
2021-07-17 16:06:29 +00:00
this . build = m [ 5 ] ? m [ 5 ] . split ( '.' ) : [ ]
this . format ( )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
SemVer . prototype . format = function ( ) {
this . version = this . major + '.' + this . minor + '.' + this . patch
if ( this . prerelease . length ) {
this . version += '-' + this . prerelease . join ( '.' )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
return this . version
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
SemVer . prototype . toString = function ( ) {
return this . version
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
SemVer . prototype . compare = function ( other ) {
debug ( 'SemVer.compare' , this . version , this . options , other )
if ( ! ( other instanceof SemVer ) ) {
other = new SemVer ( other , this . options )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
return this . compareMain ( other ) || this . comparePre ( other )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
SemVer . prototype . compareMain = function ( other ) {
if ( ! ( other instanceof SemVer ) ) {
other = new SemVer ( other , this . options )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
return compareIdentifiers ( this . major , other . major ) ||
compareIdentifiers ( this . minor , other . minor ) ||
compareIdentifiers ( this . patch , other . patch )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
SemVer . prototype . comparePre = function ( other ) {
if ( ! ( other instanceof SemVer ) ) {
other = new SemVer ( other , this . options )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
// 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
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
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 )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
SemVer . prototype . compareBuild = function ( other ) {
if ( ! ( other instanceof SemVer ) ) {
other = new SemVer ( other , this . options )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var i = 0
do {
var a = this . build [ i ]
var b = other . build [ 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 )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
} while ( ++ i )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// 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
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
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 ++
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
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 ++
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
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 ++
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
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 ]
}
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
break
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
default :
throw new Error ( 'invalid increment argument: ' + release )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
this . format ( )
this . raw = this . version
return this
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . inc = inc
function inc ( version , release , loose , identifier ) {
if ( typeof ( loose ) === 'string' ) {
identifier = loose
loose = undefined
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
try {
return new SemVer ( version , loose ) . inc ( release , identifier ) . version
} catch ( er ) {
return null
}
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
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'
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
for ( var key in v1 ) {
if ( key === 'major' || key === 'minor' || key === 'patch' ) {
if ( v1 [ key ] !== v2 [ key ] ) {
return prefix + key
}
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
return defaultResult // may be undefined
}
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . compareIdentifiers = compareIdentifiers
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
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
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
return a === b ? 0
: ( anum && ! bnum ) ? - 1
: ( bnum && ! anum ) ? 1
: a < b ? - 1
: 1
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
exports . rcompareIdentifiers = rcompareIdentifiers
function rcompareIdentifiers ( a , b ) {
return compareIdentifiers ( b , a )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . major = major
function major ( a , loose ) {
return new SemVer ( a , loose ) . major
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . minor = minor
function minor ( a , loose ) {
return new SemVer ( a , loose ) . minor
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . patch = patch
function patch ( a , loose ) {
return new SemVer ( a , loose ) . patch
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . compare = compare
function compare ( a , b , loose ) {
return new SemVer ( a , loose ) . compare ( new SemVer ( b , loose ) )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . compareLoose = compareLoose
function compareLoose ( a , b ) {
return compare ( a , b , true )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . compareBuild = compareBuild
function compareBuild ( a , b , loose ) {
var versionA = new SemVer ( a , loose )
var versionB = new SemVer ( b , loose )
return versionA . compare ( versionB ) || versionA . compareBuild ( versionB )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
exports . rcompare = rcompare
function rcompare ( a , b , loose ) {
return compare ( b , a , loose )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
exports . sort = sort
function sort ( list , loose ) {
return list . sort ( function ( a , b ) {
return exports . compareBuild ( a , b , loose )
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . rsort = rsort
function rsort ( list , loose ) {
return list . sort ( function ( a , b ) {
return exports . compareBuild ( b , a , loose )
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . gt = gt
function gt ( a , b , loose ) {
return compare ( a , b , loose ) > 0
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . lt = lt
function lt ( a , b , loose ) {
return compare ( a , b , loose ) < 0
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . eq = eq
function eq ( a , b , loose ) {
return compare ( a , b , loose ) === 0
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . neq = neq
function neq ( a , b , loose ) {
return compare ( a , b , loose ) !== 0
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . gte = gte
function gte ( a , b , loose ) {
return compare ( a , b , loose ) >= 0
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . lte = lte
function lte ( a , b , loose ) {
return compare ( a , b , loose ) <= 0
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
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
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
case '!==' :
if ( typeof a === 'object' )
a = a . version
if ( typeof b === 'object' )
b = b . version
return a !== b
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
case '' :
case '=' :
case '==' :
return eq ( a , b , loose )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
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
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
if ( comp instanceof Comparator ) {
if ( comp . loose === ! ! options . loose ) {
return comp
} else {
comp = comp . value
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
if ( ! ( this instanceof Comparator ) ) {
return new Comparator ( comp , options )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
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 [ t . COMPARATORLOOSE ] : re [ t . COMPARATOR ]
var m = comp . match ( r )
if ( ! m ) {
throw new TypeError ( 'Invalid comparator: ' + comp )
}
this . operator = m [ 1 ] !== undefined ? 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 || version === ANY ) {
return true
}
if ( typeof version === 'string' ) {
try {
version = new SemVer ( version , this . options )
} catch ( er ) {
return false
}
}
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 === '' ) {
if ( this . value === '' ) {
return true
}
rangeTmp = new Range ( comp . value , options )
return satisfies ( this . value , rangeTmp , options )
} else if ( comp . operator === '' ) {
if ( comp . value === '' ) {
return true
}
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 [ t . HYPHENRANGELOOSE ] : re [ t . 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 [ t . COMPARATORTRIM ] , comparatorTrimReplace )
debug ( 'comparator trim' , range , re [ t . COMPARATORTRIM ] )
// `~ 1.2.3` => `~1.2.3`
range = range . replace ( re [ t . TILDETRIM ] , tildeTrimReplace )
// `^ 1.2.3` => `^1.2.3`
range = range . replace ( re [ t . 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 [ t . COMPARATORLOOSE ] : re [ t . 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 (
isSatisfiable ( thisComparators , options ) &&
range . set . some ( function ( rangeComparators ) {
return (
isSatisfiable ( rangeComparators , options ) &&
thisComparators . every ( function ( thisComparator ) {
return rangeComparators . every ( function ( rangeComparator ) {
return thisComparator . intersects ( rangeComparator , options )
2021-03-02 23:07:35 +00:00
} )
2021-07-17 16:06:29 +00:00
} )
)
2021-03-02 23:07:35 +00:00
} )
2021-07-17 16:06:29 +00:00
)
} )
}
// take a set of comparators and determine whether there
// exists a version which can satisfy it
function isSatisfiable ( comparators , options ) {
var result = true
var remainingComparators = comparators . slice ( )
var testComparator = remainingComparators . pop ( )
while ( result && remainingComparators . length ) {
result = remainingComparators . every ( function ( otherComparator ) {
return testComparator . intersects ( otherComparator , options )
} )
testComparator = remainingComparators . pop ( )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
return result
}
// 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 [ t . TILDELOOSE ] : re [ t . 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'
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
debug ( 'tilde return' , ret )
return ret
} )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// ^ --> * (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 [ t . CARETLOOSE ] : re [ t . 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'
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
} 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'
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
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 [ t . XRANGELOOSE ] : re [ t . 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 = ''
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
// if we're including prereleases in the match, then we need
// to fix this to -0, the lowest possible prerelease value
pr = options . includePrerelease ? '-0' : ''
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( xM ) {
if ( gtlt === '>' || gtlt === '<' ) {
// nothing is allowed
ret = '<0.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
2021-03-02 23:07:35 +00:00
} else {
2021-07-17 16:06:29 +00:00
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
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
ret = gtlt + M + '.' + m + '.' + p + pr
} else if ( xm ) {
ret = '>=' + M + '.0.0' + pr + ' <' + ( + M + 1 ) + '.0.0' + pr
} else if ( xp ) {
ret = '>=' + M + '.' + m + '.0' + pr +
' <' + M + '.' + ( + m + 1 ) + '.0' + pr
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
debug ( 'xRange return' , ret )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
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 [ t . STAR ] , '' )
}
// This function is passed to string.replace(re[t.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
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
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
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
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
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
if ( typeof version === 'string' ) {
try {
version = new SemVer ( version , this . options )
} catch ( er ) {
return false
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
for ( var i = 0 ; i < this . set . length ; i ++ ) {
if ( testSet ( this . set [ i ] , version , this . options ) ) {
return true
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
return false
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
function testSet ( set , version , options ) {
for ( var i = 0 ; i < set . length ; i ++ ) {
if ( ! set [ i ] . test ( version ) ) {
return false
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
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
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
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
2021-03-02 23:07:35 +00:00
}
}
}
2021-07-17 16:06:29 +00:00
// Version has a -pre, but it's not one of the ones we like.
return false
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
return true
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . satisfies = satisfies
function satisfies ( version , range , options ) {
try {
range = new Range ( range , options )
} catch ( er ) {
2021-03-02 23:07:35 +00:00
return false
}
2021-07-17 16:06:29 +00:00
return range . test ( version )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
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
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
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
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
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
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . minVersion = minVersion
function minVersion ( range , loose ) {
range = new Range ( range , loose )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var minver = new SemVer ( '0.0.0' )
if ( range . test ( minver ) ) {
return minver
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
minver = new SemVer ( '0.0.0-0' )
if ( range . test ( minver ) ) {
return minver
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
minver = null
for ( var i = 0 ; i < range . set . length ; ++ i ) {
var comparators = range . set [ i ]
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
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 )
}
} )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
if ( minver && range . test ( minver ) ) {
return minver
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
return null
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . validRange = validRange
function validRange ( range , options ) {
2021-03-02 23:07:35 +00:00
try {
2021-07-17 16:06:29 +00:00
// 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
2021-03-02 23:07:35 +00:00
}
}
2021-07-17 16:06:29 +00:00
// 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 )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
// 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 )
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
exports . outside = outside
function outside ( version , range , hilo , options ) {
version = new SemVer ( version , options )
range = new Range ( range , options )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
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 ">"' )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// If it satisifes the range it is not outside
if ( satisfies ( version , range , options ) ) {
return false
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// From now on, variable terms are as if we're in "gtr" mode.
// but note that everything is flipped for the "ltr" function.
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
for ( var i = 0 ; i < range . set . length ; ++ i ) {
var comparators = range . set [ i ]
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var high = null
var low = null
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
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
}
} )
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
// If the edge version comparator has a operator then our version
// isn't outside it
if ( high . operator === comp || high . operator === ecomp ) {
return false
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
// 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
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
exports . prerelease = prerelease
function prerelease ( version , options ) {
var parsed = parse ( version , options )
return ( parsed && parsed . prerelease . length ) ? parsed . prerelease : null
2021-03-02 23:07:35 +00:00
}
2021-07-17 16:06:29 +00:00
exports . intersects = intersects
function intersects ( r1 , r2 , options ) {
r1 = new Range ( r1 , options )
r2 = new Range ( r2 , options )
return r1 . intersects ( r2 )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
exports . coerce = coerce
function coerce ( version , options ) {
if ( version instanceof SemVer ) {
return version
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( typeof version === 'number' ) {
version = String ( version )
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( typeof version !== 'string' ) {
return null
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
options = options || { }
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
var match = null
if ( ! options . rtl ) {
match = version . match ( re [ t . COERCE ] )
} else {
// Find the right-most coercible string that does not share
// a terminus with a more left-ward coercible string.
// Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
//
// Walk through the string checking with a /g regexp
// Manually set the index so as to pick up overlapping matches.
// Stop when we get a match that ends at the string end, since no
// coercible string can be more right-ward without the same terminus.
var next
while ( ( next = re [ t . COERCERTL ] . exec ( version ) ) &&
( ! match || match . index + match [ 0 ] . length !== version . length )
) {
if ( ! match ||
next . index + next [ 0 ] . length !== match . index + match [ 0 ] . length ) {
match = next
}
re [ t . COERCERTL ] . lastIndex = next . index + next [ 1 ] . length + next [ 2 ] . length
}
// leave it in a clean state
re [ t . COERCERTL ] . lastIndex = - 1
}
2021-03-02 23:07:35 +00:00
2021-07-17 16:06:29 +00:00
if ( match === null ) {
return null
}
return parse ( match [ 2 ] +
'.' + ( match [ 3 ] || '0' ) +
'.' + ( match [ 4 ] || '0' ) , options )
}
2021-03-02 23:07:35 +00:00
/***/ } ) ,
/***/ 4294 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
module . exports = _ _nccwpck _require _ _ ( 4219 ) ;
/***/ } ) ,
/***/ 4219 :
/***/ ( ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) => {
"use strict" ;
2022-04-22 03:25:41 +00:00
var net = _ _nccwpck _require _ _ ( 1808 ) ;
var tls = _ _nccwpck _require _ _ ( 4404 ) ;
var http = _ _nccwpck _require _ _ ( 3685 ) ;
var https = _ _nccwpck _require _ _ ( 5687 ) ;
var events = _ _nccwpck _require _ _ ( 2361 ) ;
var assert = _ _nccwpck _require _ _ ( 9491 ) ;
var util = _ _nccwpck _require _ _ ( 3837 ) ;
2021-03-02 23:07:35 +00:00
exports . httpOverHttp = httpOverHttp ;
exports . httpsOverHttp = httpsOverHttp ;
exports . httpOverHttps = httpOverHttps ;
exports . httpsOverHttps = httpsOverHttps ;
function httpOverHttp ( options ) {
var agent = new TunnelingAgent ( options ) ;
agent . request = http . request ;
return agent ;
}
function httpsOverHttp ( options ) {
var agent = new TunnelingAgent ( options ) ;
agent . request = http . request ;
agent . createSocket = createSecureSocket ;
agent . defaultPort = 443 ;
return agent ;
}
function httpOverHttps ( options ) {
var agent = new TunnelingAgent ( options ) ;
agent . request = https . request ;
return agent ;
}
function httpsOverHttps ( options ) {
var agent = new TunnelingAgent ( options ) ;
agent . request = https . request ;
agent . createSocket = createSecureSocket ;
agent . defaultPort = 443 ;
return agent ;
}
function TunnelingAgent ( options ) {
var self = this ;
self . options = options || { } ;
self . proxyOptions = self . options . proxy || { } ;
self . maxSockets = self . options . maxSockets || http . Agent . defaultMaxSockets ;
self . requests = [ ] ;
self . sockets = [ ] ;
self . on ( 'free' , function onFree ( socket , host , port , localAddress ) {
var options = toOptions ( host , port , localAddress ) ;
for ( var i = 0 , len = self . requests . length ; i < len ; ++ i ) {
var pending = self . requests [ i ] ;
if ( pending . host === options . host && pending . port === options . port ) {
// Detect the request to connect same origin server,
// reuse the connection.
self . requests . splice ( i , 1 ) ;
pending . request . onSocket ( socket ) ;
return ;
}
}
socket . destroy ( ) ;
self . removeSocket ( socket ) ;
} ) ;
}
util . inherits ( TunnelingAgent , events . EventEmitter ) ;
TunnelingAgent . prototype . addRequest = function addRequest ( req , host , port , localAddress ) {
var self = this ;
var options = mergeOptions ( { request : req } , self . options , toOptions ( host , port , localAddress ) ) ;
if ( self . sockets . length >= this . maxSockets ) {
// We are over limit so we'll add it to the queue.
self . requests . push ( options ) ;
return ;
}
// If we are under maxSockets create a new one.
self . createSocket ( options , function ( socket ) {
socket . on ( 'free' , onFree ) ;
socket . on ( 'close' , onCloseOrRemove ) ;
socket . on ( 'agentRemove' , onCloseOrRemove ) ;
req . onSocket ( socket ) ;
function onFree ( ) {
self . emit ( 'free' , socket , options ) ;
}
function onCloseOrRemove ( err ) {
self . removeSocket ( socket ) ;
socket . removeListener ( 'free' , onFree ) ;
socket . removeListener ( 'close' , onCloseOrRemove ) ;
socket . removeListener ( 'agentRemove' , onCloseOrRemove ) ;
}
} ) ;
} ;
TunnelingAgent . prototype . createSocket = function createSocket ( options , cb ) {
var self = this ;
var placeholder = { } ;
self . sockets . push ( placeholder ) ;
var connectOptions = mergeOptions ( { } , self . proxyOptions , {
method : 'CONNECT' ,
path : options . host + ':' + options . port ,
agent : false ,
headers : {
host : options . host + ':' + options . port
}
} ) ;
if ( options . localAddress ) {
connectOptions . localAddress = options . localAddress ;
}
if ( connectOptions . proxyAuth ) {
connectOptions . headers = connectOptions . headers || { } ;
connectOptions . headers [ 'Proxy-Authorization' ] = 'Basic ' +
new Buffer ( connectOptions . proxyAuth ) . toString ( 'base64' ) ;
}
debug ( 'making CONNECT request' ) ;
var connectReq = self . request ( connectOptions ) ;
connectReq . useChunkedEncodingByDefault = false ; // for v0.6
connectReq . once ( 'response' , onResponse ) ; // for v0.6
connectReq . once ( 'upgrade' , onUpgrade ) ; // for v0.6
connectReq . once ( 'connect' , onConnect ) ; // for v0.7 or later
connectReq . once ( 'error' , onError ) ;
connectReq . end ( ) ;
function onResponse ( res ) {
// Very hacky. This is necessary to avoid http-parser leaks.
res . upgrade = true ;
}
function onUpgrade ( res , socket , head ) {
// Hacky.
process . nextTick ( function ( ) {
onConnect ( res , socket , head ) ;
} ) ;
}
function onConnect ( res , socket , head ) {
connectReq . removeAllListeners ( ) ;
socket . removeAllListeners ( ) ;
if ( res . statusCode !== 200 ) {
debug ( 'tunneling socket could not be established, statusCode=%d' ,
res . statusCode ) ;
socket . destroy ( ) ;
var error = new Error ( 'tunneling socket could not be established, ' +
'statusCode=' + res . statusCode ) ;
error . code = 'ECONNRESET' ;
options . request . emit ( 'error' , error ) ;
self . removeSocket ( placeholder ) ;
return ;
}
if ( head . length > 0 ) {
debug ( 'got illegal response body from proxy' ) ;
socket . destroy ( ) ;
var error = new Error ( 'got illegal response body from proxy' ) ;
error . code = 'ECONNRESET' ;
options . request . emit ( 'error' , error ) ;
self . removeSocket ( placeholder ) ;
return ;
}
debug ( 'tunneling connection has established' ) ;
self . sockets [ self . sockets . indexOf ( placeholder ) ] = socket ;
return cb ( socket ) ;
}
function onError ( cause ) {
connectReq . removeAllListeners ( ) ;
debug ( 'tunneling socket could not be established, cause=%s\n' ,
cause . message , cause . stack ) ;
var error = new Error ( 'tunneling socket could not be established, ' +
'cause=' + cause . message ) ;
error . code = 'ECONNRESET' ;
options . request . emit ( 'error' , error ) ;
self . removeSocket ( placeholder ) ;
}
} ;
TunnelingAgent . prototype . removeSocket = function removeSocket ( socket ) {
var pos = this . sockets . indexOf ( socket )
if ( pos === - 1 ) {
return ;
}
this . sockets . splice ( pos , 1 ) ;
var pending = this . requests . shift ( ) ;
if ( pending ) {
// If we have pending requests and a socket gets closed a new one
// needs to be created to take over in the pool for the one that closed.
this . createSocket ( pending , function ( socket ) {
pending . request . onSocket ( socket ) ;
} ) ;
}
} ;
function createSecureSocket ( options , cb ) {
var self = this ;
TunnelingAgent . prototype . createSocket . call ( self , options , function ( socket ) {
var hostHeader = options . request . getHeader ( 'host' ) ;
var tlsOptions = mergeOptions ( { } , self . options , {
socket : socket ,
servername : hostHeader ? hostHeader . replace ( /:.*$/ , '' ) : options . host
} ) ;
// 0 is dummy port for v0.6
var secureSocket = tls . connect ( 0 , tlsOptions ) ;
self . sockets [ self . sockets . indexOf ( socket ) ] = secureSocket ;
cb ( secureSocket ) ;
} ) ;
}
function toOptions ( host , port , localAddress ) {
if ( typeof host === 'string' ) { // since v0.10
return {
host : host ,
port : port ,
localAddress : localAddress
} ;
}
return host ; // for v0.11 or later
}
function mergeOptions ( target ) {
for ( var i = 1 , len = arguments . length ; i < len ; ++ i ) {
var overrides = arguments [ i ] ;
if ( typeof overrides === 'object' ) {
var keys = Object . keys ( overrides ) ;
for ( var j = 0 , keyLen = keys . length ; j < keyLen ; ++ j ) {
var k = keys [ j ] ;
if ( overrides [ k ] !== undefined ) {
target [ k ] = overrides [ k ] ;
}
}
}
}
return target ;
}
var debug ;
if ( process . env . NODE _DEBUG && /\btunnel\b/ . test ( process . env . NODE _DEBUG ) ) {
debug = function ( ) {
var args = Array . prototype . slice . call ( arguments ) ;
if ( typeof args [ 0 ] === 'string' ) {
args [ 0 ] = 'TUNNEL: ' + args [ 0 ] ;
} else {
args . unshift ( 'TUNNEL:' ) ;
}
console . error . apply ( console , args ) ;
}
} else {
debug = function ( ) { } ;
}
exports . debug = debug ; // for test
2021-07-17 16:06:29 +00:00
/***/ } ) ,
/***/ 9046 :
/***/ ( ( _ _unused _webpack _module , exports ) => {
"use strict" ;
exports . fromCallback = function ( fn ) {
return Object . defineProperty ( function ( ... args ) {
if ( typeof args [ args . length - 1 ] === 'function' ) fn . apply ( this , args )
else {
return new Promise ( ( resolve , reject ) => {
fn . call (
this ,
... args ,
( err , res ) => ( err != null ) ? reject ( err ) : resolve ( res )
)
} )
}
} , 'name' , { value : fn . name } )
}
exports . fromPromise = function ( fn ) {
return Object . defineProperty ( function ( ... args ) {
const cb = args [ args . length - 1 ]
if ( typeof cb !== 'function' ) return fn . apply ( this , args )
else fn . apply ( this , args . slice ( 0 , - 1 ) ) . then ( r => cb ( null , r ) , cb )
} , 'name' , { value : fn . name } )
}
2021-03-02 23:07:35 +00:00
/***/ } ) ,
/***/ 2707 :
/***/ ( ( module ) => {
/ * *
* Convert array of 16 byte values to UUID string format of the form :
* XXXXXXXX - XXXX - XXXX - XXXX - XXXXXXXXXXXX
* /
var byteToHex = [ ] ;
for ( var i = 0 ; i < 256 ; ++ i ) {
byteToHex [ i ] = ( i + 0x100 ) . toString ( 16 ) . substr ( 1 ) ;
}
function bytesToUuid ( buf , offset ) {
var i = offset || 0 ;
var bth = byteToHex ;
// join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
return ( [
bth [ buf [ i ++ ] ] , bth [ buf [ i ++ ] ] ,
bth [ buf [ i ++ ] ] , bth [ buf [ i ++ ] ] , '-' ,
bth [ buf [ i ++ ] ] , bth [ buf [ i ++ ] ] , '-' ,
bth [ buf [ i ++ ] ] , bth [ buf [ i ++ ] ] , '-' ,
bth [ buf [ i ++ ] ] , bth [ buf [ i ++ ] ] , '-' ,
bth [ buf [ i ++ ] ] , bth [ buf [ i ++ ] ] ,
bth [ buf [ i ++ ] ] , bth [ buf [ i ++ ] ] ,
bth [ buf [ i ++ ] ] , bth [ buf [ i ++ ] ]
] ) . join ( '' ) ;
}
module . exports = bytesToUuid ;
/***/ } ) ,
/***/ 5859 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
// Unique ID creation requires a high quality random # generator. In node.js
// this is pretty straight-forward - we use the crypto API.
2022-04-22 03:25:41 +00:00
var crypto = _ _nccwpck _require _ _ ( 6113 ) ;
2021-03-02 23:07:35 +00:00
module . exports = function nodeRNG ( ) {
return crypto . randomBytes ( 16 ) ;
} ;
/***/ } ) ,
/***/ 824 :
/***/ ( ( module , _ _unused _webpack _exports , _ _nccwpck _require _ _ ) => {
var rng = _ _nccwpck _require _ _ ( 5859 ) ;
var bytesToUuid = _ _nccwpck _require _ _ ( 2707 ) ;
function v4 ( options , buf , offset ) {
var i = buf && offset || 0 ;
if ( typeof ( options ) == 'string' ) {
buf = options === 'binary' ? new Array ( 16 ) : null ;
options = null ;
}
options = options || { } ;
var rnds = options . random || ( options . rng || rng ) ( ) ;
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
rnds [ 6 ] = ( rnds [ 6 ] & 0x0f ) | 0x40 ;
rnds [ 8 ] = ( rnds [ 8 ] & 0x3f ) | 0x80 ;
// Copy bytes to buffer, if provided
if ( buf ) {
for ( var ii = 0 ; ii < 16 ; ++ ii ) {
buf [ i + ii ] = rnds [ ii ] ;
}
}
return buf || bytesToUuid ( rnds ) ;
}
module . exports = v4 ;
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 399 :
/***/ ( function ( _ _unused _webpack _module , exports , _ _nccwpck _require _ _ ) {
"use strict" ;
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
var desc = Object . getOwnPropertyDescriptor ( m , k ) ;
if ( ! desc || ( "get" in desc ? ! m . _ _esModule : desc . writable || desc . configurable ) ) {
desc = { enumerable : true , get : function ( ) { return m [ k ] ; } } ;
}
Object . defineProperty ( o , k2 , desc ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . prototype . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
} ;
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 core = _ _importStar ( _ _nccwpck _require _ _ ( 2186 ) ) ;
const tc = _ _importStar ( _ _nccwpck _require _ _ ( 7784 ) ) ;
const exec = _ _importStar ( _ _nccwpck _require _ _ ( 1514 ) ) ;
const path = _ _importStar ( _ _nccwpck _require _ _ ( 1017 ) ) ;
const fs = _ _importStar ( _ _nccwpck _require _ _ ( 7147 ) ) ;
const fse = _ _importStar ( _ _nccwpck _require _ _ ( 5630 ) ) ;
const os = _ _importStar ( _ _nccwpck _require _ _ ( 2037 ) ) ;
2022-08-03 12:03:16 +00:00
const CMDLINE _TOOLS _VERSION = '7.0' ;
const COMMANDLINE _TOOLS _VERSION = '8512546' ;
2022-04-22 03:25:41 +00:00
const COMMANDLINE _TOOLS _WIN _URL = ` https://dl.google.com/android/repository/commandlinetools-win- ${ COMMANDLINE _TOOLS _VERSION } _latest.zip ` ;
const COMMANDLINE _TOOLS _MAC _URL = ` https://dl.google.com/android/repository/commandlinetools-mac- ${ COMMANDLINE _TOOLS _VERSION } _latest.zip ` ;
const COMMANDLINE _TOOLS _LIN _URL = ` https://dl.google.com/android/repository/commandlinetools-linux- ${ COMMANDLINE _TOOLS _VERSION } _latest.zip ` ;
const HOME = os . homedir ( ) ;
const ANDROID _HOME _DIR = path . join ( HOME , '.android' ) ;
const ANDROID _HOME _SDK _DIR = path . join ( ANDROID _HOME _DIR , 'sdk' ) ;
let ANDROID _SDK _ROOT = process . env [ 'ANDROID_SDK_ROOT' ] || ANDROID _HOME _SDK _DIR ;
function getSdkManagerPath ( cmdToolsVersion ) {
return path . join ( ANDROID _SDK _ROOT , 'cmdline-tools' , cmdToolsVersion , 'bin' , 'sdkmanager' ) ;
}
function findPreinstalledSdkManager ( ) {
const result = { isFound : false , isCorrectVersion : false , exePath : '' } ;
// First try to find the version defined in CMDLINE_TOOLS_VERSION
result . exePath = getSdkManagerPath ( CMDLINE _TOOLS _VERSION ) ;
result . isFound = fs . existsSync ( result . exePath ) ;
if ( result . isFound ) {
result . isCorrectVersion = true ;
return result ;
}
// cmdline-tools could have a 'latest' version, but if it was installed 2 years ago
// it may not be 'latest' as of today
result . exePath = getSdkManagerPath ( 'latest' ) ;
result . isFound = fs . existsSync ( result . exePath ) ;
if ( result . isFound ) {
2022-08-03 12:00:44 +00:00
const propertiesFile = path . join ( ANDROID _SDK _ROOT , 'cmdline-tools' , 'latest' , 'source.properties' ) ;
if ( fs . existsSync ( propertiesFile ) ) {
2022-08-03 12:02:48 +00:00
result . isCorrectVersion = fs
. readFileSync ( propertiesFile , 'utf8' )
. includes ( ` Pkg.Revision= ${ CMDLINE _TOOLS _VERSION } ` ) ;
2022-08-03 12:00:44 +00:00
}
2022-04-22 03:25:41 +00:00
return result ;
}
result . exePath = '' ;
// Find whatever version is available in ANDROID_SDK_ROOT
const cmdlineToolsDir = path . join ( ANDROID _SDK _ROOT , 'cmdline-tools' ) ;
const foundVersions = fs . existsSync ( cmdlineToolsDir )
? fs . readdirSync ( cmdlineToolsDir )
: [ ] ;
const foundVersionsFiltered = foundVersions . filter ( obj => '.' !== obj && '..' !== obj ) ;
// Sort by desc, to get 2.0 first, before 1.0
const foundVersionsSorted = foundVersionsFiltered . sort ( ( a , b ) => ( a > b ? - 1 : 1 ) ) ;
for ( const version of foundVersionsSorted ) {
result . exePath = getSdkManagerPath ( version ) ;
result . isFound = fs . existsSync ( result . exePath ) ;
if ( result . isFound ) {
return result ;
}
}
result . exePath = '' ;
return result ;
}
function callSdkManager ( sdkManager , arg ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
const acceptBuffer = Buffer . from ( Array ( 10 ) . fill ( 'y' ) . join ( '\n' ) , 'utf8' ) ;
yield exec . exec ( sdkManager , [ arg ] , {
input : acceptBuffer
} ) ;
} ) ;
}
function installSdkManager ( ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
fs . mkdirSync ( ANDROID _SDK _ROOT , { recursive : true } ) ;
// touch $ANDROID_SDK_ROOT/repositories.cfg
fs . closeSync ( fs . openSync ( path . join ( ANDROID _SDK _ROOT , 'repositories.cfg' ) , 'w' ) ) ;
const sdkManager = findPreinstalledSdkManager ( ) ;
if ( ! sdkManager . isFound ) {
let cmdlineToolsURL ;
if ( process . platform === 'linux' ) {
cmdlineToolsURL = COMMANDLINE _TOOLS _LIN _URL ;
}
else if ( process . platform === 'darwin' ) {
cmdlineToolsURL = COMMANDLINE _TOOLS _MAC _URL ;
}
else if ( process . platform === 'win32' ) {
cmdlineToolsURL = COMMANDLINE _TOOLS _WIN _URL ;
}
else {
core . error ( ` Unsupported platform: ${ process . platform } ` ) ;
return '' ;
}
const cmdlineToolsZip = yield tc . downloadTool ( cmdlineToolsURL ) ;
const cmdlineToolsExtractedLocation = yield tc . extractZip ( cmdlineToolsZip ) ;
// Move cmdline-tools to where it would be if it was installed through sdkmanager
// Will allow calling sdkmanager without --sdk_root='..' argument
const desiredLocation = path . join ( ANDROID _SDK _ROOT , 'cmdline-tools' , CMDLINE _TOOLS _VERSION ) ;
// Create parent directory
fs . mkdirSync ( path . dirname ( desiredLocation ) , { recursive : true } ) ;
// Make sure we don't have leftover target directory (happens sometimes...)
if ( fs . existsSync ( desiredLocation ) )
fse . removeSync ( desiredLocation ) ;
// @TODO: use io.mv instead of fs-extra.moveSync once following issue is resolved:
// https://github.com/actions/toolkit/issues/706
fse . moveSync ( path . join ( cmdlineToolsExtractedLocation , 'cmdline-tools' ) , desiredLocation ) ;
fse . removeSync ( cmdlineToolsExtractedLocation ) ;
sdkManager . exePath = getSdkManagerPath ( CMDLINE _TOOLS _VERSION ) ;
sdkManager . isCorrectVersion = true ;
}
if ( ! sdkManager . isCorrectVersion ) {
yield callSdkManager ( sdkManager . exePath , ` cmdline-tools; ${ CMDLINE _TOOLS _VERSION } ` ) ;
sdkManager . exePath = getSdkManagerPath ( CMDLINE _TOOLS _VERSION ) ;
}
return sdkManager . exePath ;
} ) ;
}
function run ( ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
if ( 'win16' === process . env [ 'ImageOS' ] ) {
if ( - 1 !== ANDROID _SDK _ROOT . indexOf ( ' ' ) ) {
// On Windows2016, Android SDK is installed to Program Files,
// and it doesn't really work..
// C:\windows\system32\cmd.exe /D /S /C ""C:\Program Files (x86)\Android\android-sdk\cmdline-tools\3.0\bin\sdkmanager.bat" --licenses"
// Error: Could not find or load main class Files
const newSDKLocation = ANDROID _SDK _ROOT . replace ( /\s/gi , '-' ) ;
core . debug ( ` moving ${ ANDROID _SDK _ROOT } to ${ newSDKLocation } ` ) ;
fs . mkdirSync ( path . dirname ( newSDKLocation ) , { recursive : true } ) ;
// intentionally using fs.renameSync,
// because it doesn't move across drives
fs . renameSync ( ANDROID _SDK _ROOT , newSDKLocation ) ;
ANDROID _SDK _ROOT = newSDKLocation ;
}
}
const sdkManager = yield installSdkManager ( ) ;
core . debug ( ` sdkmanager installed to: ${ sdkManager } ` ) ;
yield callSdkManager ( sdkManager , '--licenses' ) ;
yield callSdkManager ( sdkManager , 'tools' ) ;
yield callSdkManager ( sdkManager , 'platform-tools' ) ;
core . setOutput ( 'ANDROID_COMMANDLINE_TOOLS_VERSION' , COMMANDLINE _TOOLS _VERSION ) ;
core . exportVariable ( 'ANDROID_HOME' , ANDROID _SDK _ROOT ) ;
core . exportVariable ( 'ANDROID_SDK_ROOT' , ANDROID _SDK _ROOT ) ;
core . addPath ( path . dirname ( sdkManager ) ) ;
core . addPath ( path . join ( ANDROID _SDK _ROOT , 'platform-tools' ) ) ;
core . debug ( 'add matchers' ) ;
// eslint-disable-next-line no-console
console . log ( ` ##[add-matcher] ${ path . join ( _ _dirname , '..' , 'matchers.json' ) } ` ) ;
} ) ;
}
run ( ) ;
/***/ } ) ,
/***/ 9491 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "assert" ) ;
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 2081 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "child_process" ) ;
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 2057 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "constants" ) ;
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 6113 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "crypto" ) ;
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 2361 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "events" ) ;
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 7147 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "fs" ) ;
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 3685 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "http" ) ;
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 5687 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "https" ) ;
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 1808 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "net" ) ;
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 2037 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "os" ) ;
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 1017 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "path" ) ;
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 2781 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "stream" ) ;
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 1576 :
2021-07-17 16:06:29 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "string_decoder" ) ;
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 9512 :
2021-07-17 16:06:29 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "timers" ) ;
2021-07-17 16:06:29 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 4404 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "tls" ) ;
2021-03-02 23:07:35 +00:00
/***/ } ) ,
2022-04-22 03:25:41 +00:00
/***/ 3837 :
2021-03-02 23:07:35 +00:00
/***/ ( ( module ) => {
"use strict" ;
2021-07-17 17:06:08 +00:00
module . exports = require ( "util" ) ;
2021-03-02 23:07:35 +00:00
/***/ } )
/******/ } ) ;
/************************************************************************/
/******/ // The module cache
/******/ var _ _webpack _module _cache _ _ = { } ;
/******/
/******/ // The require function
/******/ function _ _nccwpck _require _ _ ( moduleId ) {
/******/ // Check if module is in cache
2021-07-17 17:06:08 +00:00
/******/ var cachedModule = _ _webpack _module _cache _ _ [ moduleId ] ;
/******/ if ( cachedModule !== undefined ) {
/******/ return cachedModule . exports ;
2021-03-02 23:07:35 +00:00
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = _ _webpack _module _cache _ _ [ moduleId ] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports : { }
/******/ } ;
/******/
/******/ // Execute the module function
/******/ var threw = true ;
/******/ try {
/******/ _ _webpack _modules _ _ [ moduleId ] . call ( module . exports , module , module . exports , _ _nccwpck _require _ _ ) ;
/******/ threw = false ;
/******/ } finally {
/******/ if ( threw ) delete _ _webpack _module _cache _ _ [ moduleId ] ;
/******/ }
/******/
/******/ // Return the exports of the module
/******/ return module . exports ;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat */
/******/
2021-07-17 17:06:08 +00:00
/******/ if ( typeof _ _nccwpck _require _ _ !== 'undefined' ) _ _nccwpck _require _ _ . ab = _ _dirname + "/" ;
/******/
/************************************************************************/
2022-04-22 03:25:41 +00:00
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module is referenced by other modules so it can't be inlined
/******/ var _ _webpack _exports _ _ = _ _nccwpck _require _ _ ( 399 ) ;
/******/ module . exports = _ _webpack _exports _ _ ;
/******/
2021-03-02 23:07:35 +00:00
/******/ } ) ( )
;