1
+ #!/usr/bin/env node
2
+ 'use strict'
3
+ const yargs_parser = require ( 'yargs-parser' )
4
+ const path = require ( "path" ) ;
5
+ const chalk = require ( 'chalk' ) ;
6
+ const ora = require ( "ora" ) ;
7
+ const { extract } = require ( 'pacote' ) ;
8
+ const fs = require ( "fs-extra" ) ;
9
+ const os = require ( 'os' ) ;
10
+ const packageName = 'html5-boilerplate' ;
11
+ const tempDir = os . tmpdir ( ) + `/${ packageName } -staging` ;
12
+ const elapsed = require ( "elapsed-time-logger" ) ;
13
+
14
+ module . exports = async ( ) => {
15
+ const argv = yargs_parser ( process . argv . slice ( 2 ) , { alias :{ release : [ 'r' ] } } ) ;
16
+ const timer = elapsed . start ( ) ;
17
+ const version = argv [ 'release' ] || 'latest' ;
18
+ const targetDir = path . resolve ( argv [ '_' ] [ 0 ] || './' ) ;
19
+ const spinner = ora ( `Downloading ${ packageName } version '${ version } ' to ${ targetDir } ` ) . start ( ) ;
20
+ await fs . ensureDir ( tempDir ) ;
21
+ try {
22
+ const { from : nameWithVersion } = await extract ( packageName + '@' + version , tempDir , { } ) ;
23
+ spinner . text = `${ nameWithVersion } copied to ${ targetDir } in ${ timer . get ( ) } . Have fun!` ;
24
+ } catch ( err ) {
25
+ await fs . remove ( tempDir ) ;
26
+ if ( err . code === 'ETARGET' ) {
27
+ spinner . fail ( chalk . red ( `version '${ err . wanted } ' not found in npm registry\navailable versions:` ) ) ;
28
+ console . log ( err . versions . reverse ( ) . join ( ' | ' ) ) ;
29
+ } else {
30
+ spinner . fail ( 'Unexpected error' ) ;
31
+ console . error ( err ) ;
32
+ }
33
+ process . exit ( 0 ) ;
34
+ }
35
+ await fs . copy ( tempDir + '/dist' , targetDir ) ;
36
+ await fs . remove ( tempDir ) ;
37
+ spinner . succeed ( ) ;
38
+ return ;
39
+ } ;
0 commit comments