All files / lib build-backend.js

87.23% Statements 41/47
44.44% Branches 8/18
85.71% Functions 6/7
87.23% Lines 41/47
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95                          4x 4x 4x 4x   4x 4x 4x 4x 4x         4x     1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x   1x 1x 1x 1x 1x   1x                                         1x 1x 1x 1x 1x   1x 1x         1x 1x     4x          
/* 
 * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
 * the License. A copy of the License is located at
 *
 *     http://aws.amazon.com/apache2.0/
 *
 * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
 * and limitations under the License.
*/
"use strict";
const _ = require('lodash')
const chalk = require('chalk')
const moment = require('moment')
const fs = require('fs-extra')
 
const projectInfoManager = require('./project-info-manager.js')
const awsmobileJSConstant = require('./utils/awsmobilejs-constant.js')
const pathManager = require('./utils/awsmobilejs-path-manager.js')
const backendSpecManager = require('./backend-operations/backend-spec-manager.js')
const opsProject = require('./backend-operations/ops-project.js')
 
let _callback
let _projectInfo
let _backendProject
let _isNewBuildExecuted = false
 
function build(callback) {
    _callback = callback
    _projectInfo = projectInfoManager.getProjectInfo()
    Eif(_projectInfo){
        ensureFolderStructure(_projectInfo.ProjectPath)
        _backendProject = backendSpecManager.getBackendProjectObject(_projectInfo)
        Eif(_backendProject){
            console.log('checking the backend contents')
            let enabledFeatures = backendSpecManager.getEnabledFeaturesFromObject(_backendProject)
            Eif(enabledFeatures.length > 0){
                let count = 0
                enabledFeatures.forEach(function(featureName){
                    const opsFeature = require(pathManager.getOpsFeatureFilePath(featureName))
                    opsFeature.build(_projectInfo, _backendProject, function(isNewBuildExecuted){
                        Eif(isNewBuildExecuted){
                            _isNewBuildExecuted = true
                        }
                        count++
                        Eif(count == enabledFeatures.length){
                            opsProject.build(_projectInfo, _backendProject, function(isNewBuildExecuted){
                                Eif(isNewBuildExecuted){
                                    _isNewBuildExecuted = true
                                }
                                onBuildComplete()
                            })
                        }
                    })                
                })
            }else{
                opsProject.build(_projectInfo, _backendProject, function(isNewBuildExecuted){
                    if(isNewBuildExecuted){
                        _isNewBuildExecuted = true
                    }
                    onBuildComplete()
                })
            }
        }else{
            console.log(chalk.red('local backend specs appear to be corrupted'))
            console.log('please restore the local backend specs to a valid state before continuing')
        }
    }
}
 
function onBuildComplete(){
    Eif(_isNewBuildExecuted){
        _projectInfo.BackendLastBuildTime = moment().format(awsmobileJSConstant.DateTimeFormatString) 
        projectInfoManager.setProjectInfo(_projectInfo)
        console.log('backend build artifacts are saved at: ')
        console.log(chalk.blue(pathManager.getBackendBuildDirPath(_projectInfo.ProjectPath)))
    }
    Eif(_callback){
        _callback()
    }
}
 
function ensureFolderStructure(projectPath){
    let backendBuildPath = pathManager.getBackendBuildDirPath(projectPath)
    fs.ensureDirSync(backendBuildPath)
}
 
module.exports = {
    build
}