@@ -13,12 +13,32 @@ const xfs = require('fs.extra');
1313const randomName = require ( 'project-name-generator' ) ;
1414const registerPartial = require ( './register-partial' ) ;
1515const bundler = require ( './bundler' ) ;
16+ const yellow = text => `\x1b[33m${ text } \x1b[0m` ;
17+ const findRemoveSync = require ( 'find-remove' ) ;
1618
1719const codegen = module . exports ;
1820
1921const HELPERS_DIRNAME = '.helpers' ;
2022const PARTIALS_DIRNAME = '.partials' ;
2123
24+ /**
25+ * Deletes all matching subfolders in target directory
26+ *
27+ * @param {Object } config Configuration options
28+ * @returns {Promise }
29+ */
30+ const deleteFolders = config => new Promise ( ( resolve , reject ) => {
31+ try {
32+ if ( config . deleteFolders ) {
33+ console . warn ( yellow ( `Deleting all subfolders named '${ config . deleteFolders } ' in ouput directory '${ config . target_dir } '` ) ) ;
34+ findRemoveSync ( config . target_dir , { dir : config . deleteFolders } ) ;
35+ }
36+ resolve ( ) ;
37+ } catch ( e ) {
38+ reject ( e ) ;
39+ }
40+ } ) ;
41+
2242/**
2343 * Generates a file.
2444 *
@@ -46,10 +66,19 @@ const generateFile = options => new Promise((resolve, reject) => {
4666 const parsed_content = template ( data ) ;
4767 const template_path = path . relative ( templates_dir , path . resolve ( root , file_name ) ) ;
4868 const generated_path = path . resolve ( target_dir , template_path ) . replace ( / .h b s $ / , '' ) ;
49- fs . writeFile ( generated_path , parsed_content , 'utf8' , ( err ) => {
50- if ( err ) return reject ( err ) ;
69+ // WIP check here for existing?
70+ const skipFile = data . skipExistingFiles && fs . existsSync ( generated_path ) ;
71+ if ( ! skipFile ) {
72+ fs . writeFile ( generated_path , parsed_content , 'utf8' , ( err ) => {
73+ if ( err ) return reject ( err ) ;
74+ resolve ( ) ;
75+ } ) ;
76+ }
77+ else {
78+ console . warn ( yellow ( `Skipping file: ${ generated_path } ` ) ) ;
5179 resolve ( ) ;
52- } ) ;
80+ }
81+
5382 } catch ( e ) {
5483 reject ( e ) ;
5584 }
@@ -306,6 +335,7 @@ codegen.generate = config => new Promise((resolve, reject) => {
306335 config . templates = `${ config . templates } /${ config . template } ` ;
307336
308337 async function start ( ) {
338+ await deleteFolders ( config ) ;
309339 await registerHelpers ( config ) ;
310340 await registerPartials ( config ) ;
311341 await generateDirectoryStructure ( config ) ;
0 commit comments