@@ -95,23 +95,43 @@ export default asyncCommand({
9595
9696 // Extract files from `archive` to `target`
9797 // TODO: read & respond to meta/hooks
98- let hasDir = false ;
98+ let keeps = [ ] ;
9999 await gittar . extract ( archive , target , {
100100 strip : 2 ,
101- filter ( path ) {
102- return path . includes ( '/template/' ) && ( hasDir = true ) ;
101+ filter ( path , obj ) {
102+ if ( path . includes ( '/template/' ) ) {
103+ obj . on ( 'end' , ( ) => obj . type === 'File' && keeps . push ( obj . absolute ) ) ;
104+ return true ;
105+ }
103106 }
104107 } ) ;
105108
106- if ( ! hasDir ) {
109+ if ( keeps . length ) {
110+ // eslint-disable-next-line
111+ let dict = new Map ( ) ;
112+ // TODO: concat author-driven patterns
113+ [ 'name' ] . forEach ( str => {
114+ // if value is defined
115+ if ( argv [ str ] !== void 0 ) {
116+ dict . set ( new RegExp ( `{{\\s?${ str } \\s}}` , 'g' ) , argv [ str ] ) ;
117+ }
118+ } ) ;
119+ // Update each file's contents
120+ for ( let entry of keeps ) {
121+ let buf = await fs . readFile ( entry , 'utf8' ) ;
122+ dict . forEach ( ( v , k ) => {
123+ buf = buf . replace ( k , v ) ;
124+ } ) ;
125+ await fs . writeFile ( entry , buf ) ;
126+ }
127+ } else {
107128 return error ( `No \`template\` directory found within ${ repo } !` , 1 ) ;
108129 }
109130
110131 spinner . text = 'Parsing `package.json` file' ;
111132
112133 // Validate user's `package.json` file
113- let pkgData ;
114- let pkgFile = resolve ( target , 'package.json' ) ;
134+ let pkgData , pkgFile = resolve ( target , 'package.json' ) ;
115135
116136 if ( pkgFile ) {
117137 pkgData = JSON . parse ( await fs . readFile ( pkgFile ) ) ;
0 commit comments