nl_tokens: Downloads and unpacks a given tarball or zip file at a given path .
pl_tokens: async function downloadAndUnpackResource ( uri , destPath , callback ) { // If HTTPS_PROXY, https_proxy, HTTP_PROXY, or http_proxy is set const proxy = process . env [ 'HTTPS_PROXY' ] || process . env [ 'https_proxy' ] || process . env [ 'HTTP_PROXY' ] || process . env [ 'http_proxy' ] || '' ; // Using object destructuring to construct the options object for the // http request.  the '...url.parse(targetUri)' part fills in the host, // path, protocol, etc from the targetUri and then we set the agent to the // default agent which is overridden a few lines down if there is a proxy const options = { ... url . parse ( uri ) , agent : https . globalAgent } ; if ( proxy !== '' ) { options . <mask> = new HttpsProxyAgent ( proxy ) ; } const request = https . get ( uri , response => { const bar = new ProgressBar ( '[:bar] :rate/bps :percent :etas' , { complete : '=' , incomplete : ' ' , width : 30 , total : parseInt ( response . headers [ 'content-length' ] , 10 ) } ) ; if ( uri . endsWith ( '.zip' ) ) { // Save zip file to disk, extract, and delete the downloaded zip file. const tempFileName = path . join ( __dirname , '_tmp.zip' ) ; const outputFile = fs . createWriteStream ( tempFileName ) ; response . on ( 'data' , chunk => bar . tick ( chunk . length ) ) . pipe ( outputFile ) . on ( 'close' , async ( ) => { const zipFile = new zip ( tempFileName ) ; zipFile . extractAllTo ( destPath , true /* overwrite */ ) ; await unlink ( tempFileName ) ; if ( callback !== undefined ) { callback ( ) ; } } ) ; } else if ( uri . endsWith ( '.tar.gz' ) ) { response . on ( 'data' , chunk => bar . tick ( chunk . length ) ) . pipe ( tar . x ( { C : destPath , strict : true } ) ) . on ( 'close' , ( ) => { if ( callback !== undefined ) { callback ( ) ; } } ) ; } else { throw new Error ( ` ${ uri } ` ) ; } } ) ; request . end ( ) ; }