@@ -4,7 +4,6 @@ const AWS = require('aws-sdk');
44const diff = require ( 'json-diff' ) . diffString ;
55const exec = require ( 'child-process-promise' ) . exec ;
66const fs = require ( 'fs-promise' ) ;
7- const Q = require ( 'q' ) ;
87
98class ServerlessPlugin {
109 constructor ( serverless , options ) {
@@ -57,40 +56,44 @@ class ServerlessPlugin {
5756 }
5857
5958 downloadTemplate ( ) {
60- const deferred = Q . defer ( ) ;
59+ let stackName ;
60+
6161 const orgTemplate = this . options . orgTemplate ;
62+
63+ if ( this . serverless . service . provider
64+ && typeof this . serverless . service . provider . stackName !== 'undefined'
65+ && this . serverless . service . provider . stackName !== '' ) {
66+ stackName = this . serverless . service . provider . stackName ;
67+ } else {
68+ stackName = `${ this . serverless . service . service } -${ this . options . stage } ` ;
69+ }
70+
6271 const params = {
63- StackName : ` ${ this . serverless . service . service } - ${ this . options . stage } ` ,
72+ StackName : stackName ,
6473 TemplateStage : 'Processed' ,
6574 } ;
6675
6776 this . serverless . cli . log ( 'Downloading currently deployed template' ) ;
6877
69- this . cloudFormation . getTemplate ( params , ( err , data ) => {
70- if ( err ) {
71- deferred . reject ( err . message ) ;
72- } else {
78+ return this . cloudFormation . getTemplate ( params ) . promise ( )
79+ . then ( ( data ) => {
7380 let templateBody = JSON . parse ( data . TemplateBody ) ;
7481 templateBody = JSON . stringify ( templateBody , null , 2 ) ;
7582
76- fs . writeFile ( orgTemplate , templateBody )
77- . then ( ( ) => deferred . resolve ( ) )
78- . catch ( fsErr => deferred . reject ( fsErr . message ) ) ;
79- }
80- } ) ;
81-
82- return deferred . promise ;
83+ return fs . writeFile ( orgTemplate , templateBody )
84+ . then ( ( ) => Promise . resolve ( ) ) ;
85+ } )
86+ . catch ( err => Promise . reject ( err . message ) ) ;
8387 }
8488
8589 diff ( ) {
86- const deferred = Q . defer ( ) ;
8790 const diffTool = this . options . diffTool ;
8891 const localTemplate = this . options . localTemplate ;
8992 const orgTemplate = this . options . orgTemplate ;
9093
9194 this . serverless . cli . log ( 'Running diff against deployed template' ) ;
9295
93- fs . stat ( localTemplate )
96+ return fs . stat ( localTemplate )
9497 . then ( ( ) => {
9598 if ( typeof diffTool === 'undefined' ) {
9699 const orgTemplateJson = JSON . parse ( fs . readFileSync ( orgTemplate , 'utf8' ) ) ;
@@ -103,25 +106,23 @@ class ServerlessPlugin {
103106 console . log ( differences ) ;
104107 }
105108
106- deferred . resolve ( differences ) ;
107- } else {
108- exec ( `${ diffTool } ${ orgTemplate } ${ localTemplate } || true` )
109- . then ( ( result ) => {
110- const diffData = result . stdout ;
111- console . log ( diffData ) ;
112- deferred . resolve ( diffData ) ;
113- } )
114- . catch ( execErr => deferred . reject ( execErr . message ) ) ;
109+ return Promise . resolve ( differences ) ;
115110 }
111+
112+ return exec ( `${ diffTool } ${ orgTemplate } ${ localTemplate } || true` )
113+ . then ( ( result ) => {
114+ const diffData = result . stdout ;
115+ console . log ( diffData ) ;
116+ return Promise . resolve ( diffData ) ;
117+ } ) ;
116118 } )
117119 . catch ( ( err ) => {
118120 if ( err . code === 'ENOENT' ) {
119121 const errorPrefix = `${ localTemplate } could not be found:` ;
120- deferred . reject ( `${ errorPrefix } run "sls deploy --noDeploy" first.` ) ;
122+ return Promise . reject ( `${ errorPrefix } run "sls deploy --noDeploy" first.` ) ;
121123 }
124+ return Promise . reject ( err ) ;
122125 } ) ;
123-
124- return deferred . promise ;
125126 }
126127}
127128
0 commit comments