@@ -4,7 +4,6 @@ const AWS = require('aws-sdk');
4
4
const diff = require ( 'json-diff' ) . diffString ;
5
5
const exec = require ( 'child-process-promise' ) . exec ;
6
6
const fs = require ( 'fs-promise' ) ;
7
- const Q = require ( 'q' ) ;
8
7
9
8
class ServerlessPlugin {
10
9
constructor ( serverless , options ) {
@@ -57,40 +56,44 @@ class ServerlessPlugin {
57
56
}
58
57
59
58
downloadTemplate ( ) {
60
- const deferred = Q . defer ( ) ;
59
+ let stackName ;
60
+
61
61
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
+
62
71
const params = {
63
- StackName : ` ${ this . serverless . service . service } - ${ this . options . stage } ` ,
72
+ StackName : stackName ,
64
73
TemplateStage : 'Processed' ,
65
74
} ;
66
75
67
76
this . serverless . cli . log ( 'Downloading currently deployed template' ) ;
68
77
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 ) => {
73
80
let templateBody = JSON . parse ( data . TemplateBody ) ;
74
81
templateBody = JSON . stringify ( templateBody , null , 2 ) ;
75
82
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 ) ) ;
83
87
}
84
88
85
89
diff ( ) {
86
- const deferred = Q . defer ( ) ;
87
90
const diffTool = this . options . diffTool ;
88
91
const localTemplate = this . options . localTemplate ;
89
92
const orgTemplate = this . options . orgTemplate ;
90
93
91
94
this . serverless . cli . log ( 'Running diff against deployed template' ) ;
92
95
93
- fs . stat ( localTemplate )
96
+ return fs . stat ( localTemplate )
94
97
. then ( ( ) => {
95
98
if ( typeof diffTool === 'undefined' ) {
96
99
const orgTemplateJson = JSON . parse ( fs . readFileSync ( orgTemplate , 'utf8' ) ) ;
@@ -103,25 +106,23 @@ class ServerlessPlugin {
103
106
console . log ( differences ) ;
104
107
}
105
108
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 ) ;
115
110
}
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
+ } ) ;
116
118
} )
117
119
. catch ( ( err ) => {
118
120
if ( err . code === 'ENOENT' ) {
119
121
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.` ) ;
121
123
}
124
+ return Promise . reject ( err ) ;
122
125
} ) ;
123
-
124
- return deferred . promise ;
125
126
}
126
127
}
127
128
0 commit comments