11'use strict' ;
22
3- const buildModel = require ( './model' ) . build ,
3+ const ServerCodeModel = require ( './model' ) ,
44 logger = require ( '../util/logger' ) ,
55 path = require ( 'path' ) ,
66 fs = require ( 'fs' ) ,
@@ -11,35 +11,76 @@ const buildModel = require('./model').build,
1111const APP_SIZE_LIMIT_REACHED = 'You have reached your limit' ;
1212
1313exports . publish = function ( opts ) {
14- const model = buildModel ( process . cwd ( ) , opts . app . files ) ;
15- const zipped = generateZip ( model , opts . app . files . concat ( dependencyPatterns ( ) ) ) ;
1614 const apiServer = new ApiServerService ( opts . app , opts . backendless . apiServer ) ;
17-
18- let registered = false ;
19-
20- if ( opts . keepZip ) {
21- fs . writeFile ( 'deploy.zip' , zipped ) ;
22- logger . info ( `Deployment archive is saved to ${ path . resolve ( 'deploy.zip' ) } ` ) ;
15+
16+ let registered ;
17+ let zipped ;
18+ let model ;
19+
20+ function buildModel ( ) {
21+ model = ServerCodeModel . build ( process . cwd ( ) , file . expand ( opts . app . files , { nodir : true } ) ) ;
22+
23+ if ( model . isEmpty ( ) ) {
24+ throw new Error ( 'Nothing to publish' ) ;
25+ }
2326 }
2427
25- Promise . resolve ( )
26- . then ( ( ) => apiServer . registerRunner ( ) ) // http://bugs.backendless.com/browse/BKNDLSS-11655
27- . then ( ( ) => registered = true )
28- . then ( ( ) => apiServer . registerModel ( model ) )
29- . then ( ( ) => apiServer . publish ( zipped ) )
30- . catch ( err => {
31- const message = String ( err . message || err ) ;
28+ function zip ( ) {
29+ zipped = generateZip ( model , dependencyPatterns ( ) . concat ( opts . app . files ) , opts . keepZip ) ;
30+ }
31+
32+ function publishHandlers ( ) {
33+ if ( model . handlers . values ( ) . length ) {
34+ return apiServer . registerModel ( model ) . then ( ( ) => {
35+ return apiServer . publish ( zipped ) ;
36+ } ) ;
37+ }
38+ }
39+
40+ function publishServices ( ) {
41+ const services = model . services . values ( ) ;
42+
43+ if ( services . length ) {
44+ // return apiServer.unregisterDebugServices()
45+ // .then(() => Promise.all(services.map((s) => {
46+ // return apiServer.publishService(s.name, model.describeService(s.name));
47+ // })));
48+ }
49+ }
50+
51+ function registerRunner ( ) {
52+ return apiServer . registerRunner ( ) // http://bugs.backendless.com/browse/BKNDLSS-11655
53+ . then ( ( ) => registered = true ) ;
54+ }
55+
56+ function finalize ( ) {
57+ if ( registered ) {
58+ registered = false ;
59+
60+ return apiServer . unregisterRunner ( ) ;
61+ }
62+ }
3263
33- logger . error ( message ) ;
64+ return Promise . resolve ( )
65+ . then ( buildModel )
66+ . then ( zip )
67+ . then ( registerRunner )
68+ . then ( publishHandlers )
69+ . then ( publishServices )
70+ . then ( finalize )
71+ . catch ( err => {
72+ finalize ( ) ;
3473
74+ const message = String ( err . message || err ) ;
3575 if ( message . includes ( APP_SIZE_LIMIT_REACHED ) ) {
3676 logger . info ( 'You can decrease an application deployment zip size by adding an exclusion filters to your {app.files} config parameter. ' ) ;
3777 }
38- } )
39- . then ( ( ) => registered && apiServer . unregisterRunner ( ) ) ;
78+
79+ throw err ;
80+ } ) ;
4081} ;
4182
42- function generateZip ( model , patterns ) {
83+ function generateZip ( model , patterns , keep ) {
4384 logger . info ( 'Preparing app zip file for deployment..' ) ;
4485 logger . debug ( 'File patterns to be included:' ) ;
4586
@@ -62,7 +103,14 @@ function generateZip(model, patterns) {
62103
63104 logger . info ( `${ files } files added into deployment archive` ) ;
64105
65- return zip . generate ( { type : 'nodebuffer' } ) ;
106+ const result = zip . generate ( { type : 'nodebuffer' } ) ;
107+
108+ if ( keep ) {
109+ fs . writeFile ( 'deploy.zip' , result ) ;
110+ logger . info ( `Deployment archive is saved to ${ path . resolve ( 'deploy.zip' ) } ` ) ;
111+ }
112+
113+ return result ;
66114}
67115
68116function dependencyPatterns ( ) {
0 commit comments