All files / lib backend-create.js

93.48% Statements 43/46
60% Branches 12/20
100% Functions 8/8
93.48% Lines 43/46
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 96 97 98 99 100 101 102 103                          3x 3x 3x 3x   3x 3x 3x 3x 3x 3x 3x 3x     2x 2x 2x     2x               2x 2x                 2x   2x 2x           2x 2x 2x 2x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x                           2x 2x   2x 2x       2x     3x    
/* 
 * 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 fs = require('fs-extra')
const inquirer = require('inquirer')
const chalk = require('chalk')
const ora = require('ora')
 
const backendWaitLogic = require('./backend-wait-logic.js')
const backendInfoManager = require('./backend-operations/backend-info-manager.js')
const awsConfigManager = require('./aws-operations/aws-config-manager.js')
const awsClient = require('./aws-operations/aws-client.js')
const awsExceptionHandler = require('./aws-operations/aws-exception-handler.js')
const opsProject = require('./backend-operations/ops-project.js')
const pathManager = require('./utils/awsmobilejs-path-manager.js')
const nameManager = require('./utils/awsmobilejs-name-manager.js')
 
function createBackendProject(projectInfo, options, callback){
    awsConfigManager.checkAWSConfig(function(awsDetails){
        let mobileProjectName = nameManager.generateBackendProjectName(projectInfo)
        Iif(options.yesFlag){
            createProject(projectInfo, awsDetails, mobileProjectName, options, callback)
        }else{
            inquirer.prompt([
                {
                    type: 'input',
                    name: 'mobileProjectName',
                    message: "What awsmobile project name would you like to use: ",
                    default: mobileProjectName
                }
            ]).then(function (answers) {
                Eif(answers.mobileProjectName){
                    createProject(projectInfo, awsDetails, answers.mobileProjectName, options, callback)
                }
            })
        }
    })
}
 
function createProject(projectInfo, awsDetails, mobileProjectName, options, callback){
 
    let mobile = awsClient.Mobile(awsDetails)
 
    let backendContents = getBackendContents(options)
    let param = {
        name: mobileProjectName,
        region: awsDetails.config.region,
        contents: backendContents
    }
 
    let spinner = ora('creating backend awsmobile project ' + param.name)
    spinner.start()
    mobile.createProject(param, function(err,data){
        spinner.stop()
        console.log()
        if(err){
            console.log(chalk.red('backend awsmobile project creation error'))
            awsExceptionHandler.handleMobileException(err)
        }else Eif(data && data.details){
            backendWaitLogic.wait(data.details, awsDetails, (err, backendDetails) => {
                Eif(!err){ 
                    console.log('Successfully created AWS Mobile Hub project: ' + chalk.blue(data.details.name))
                    console.log()
                    backendInfoManager.syncCurrentBackendInfo(projectInfo, backendDetails, awsDetails, options.syncToDevFlag, function(){
                        Eif(callback){
                            callback()
                        }
                    })
                }
            })
        }else{
            console.log(chalk.red('something went wrong'))
        }
    })
}
 
function getBackendContents(options){
    let backendContents
 
    Eif(options){
        Iif(options.contentZipFilePath){
            backendContents = fs.readFileSync(options.contentZipFilePath)
        }else Eif(options.useDefault){
            backendContents = fs.readFileSync(pathManager.getProjectCreationContentZipFilePath())
        }
    }
 
    return backendContents
}
 
module.exports = {
    createBackendProject
}