@@ -17,16 +17,25 @@ var filter = require('./filter')
1717
1818module . exports = function generate ( name , src , dest , done ) {
1919 var opts = getOptions ( name , src )
20- Metalsmith ( path . join ( src , 'template' ) )
20+ var metalsmith = Metalsmith ( path . join ( src , 'template' ) )
21+ var data = metalsmith . metadata ( )
22+ // avoid handlebars escaping HTML
23+ data . noEscape = true
24+ metalsmith
2125 . use ( askQuestions ( opts . schema ) )
2226 . use ( filterFiles ( opts . filters ) )
2327 . use ( renderTemplateFiles )
2428 . clean ( false )
2529 . source ( '.' ) // start from template root instead of `./src` which is Metalsmith's default for `source`
2630 . destination ( dest )
2731 . build ( function ( err ) {
28- if ( err ) throw err
29- done ( )
32+ done ( err )
33+ if ( opts . completeMessage ) {
34+ formatMessage ( opts . completeMessage , data , function ( err , message ) {
35+ if ( err ) return done ( err )
36+ console . log ( message )
37+ } )
38+ }
3039 } )
3140}
3241
@@ -67,7 +76,6 @@ function filterFiles (filters) {
6776function renderTemplateFiles ( files , metalsmith , done ) {
6877 var keys = Object . keys ( files )
6978 var metalsmithMetadata = metalsmith . metadata ( )
70- metalsmithMetadata . noEscape = true
7179 async . each ( keys , function ( file , next ) {
7280 var str = files [ file ] . contents . toString ( )
7381 // do not attempt to render files that do not have mustaches
@@ -81,3 +89,20 @@ function renderTemplateFiles (files, metalsmith, done) {
8189 } )
8290 } , done )
8391}
92+
93+ /**
94+ * Format complete message.
95+ *
96+ * @param {String } message
97+ * @param {Object } data
98+ * @param {Function } cb
99+ */
100+
101+ function formatMessage ( message , data , cb ) {
102+ render ( message , data , function ( err , res ) {
103+ if ( err ) return cb ( err )
104+ cb ( null , '\n' + res . split ( / \r ? \n / g) . map ( function ( line ) {
105+ return ' ' + line
106+ } ) . join ( '\n' ) )
107+ } )
108+ }
0 commit comments