@litexa/core
Version:
Litexa, a programming language for writing Alexa skills
89 lines (70 loc) • 2.54 kB
text/coffeescript
###
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
###
require('@src/getter.polyfill')
debug = require('debug')('config-generator')
path = require 'path'
Generator = require('./generator')
strategies = require('../bundlingStrategies')
projectNameValidate = require('./validators/projectNameValidator')
class ConfigGenerator extends Generator
@description: 'config file'
constructor: (args) ->
super(args)
@bundlingStrategy = @options.bundlingStrategy
@config = args.config
@inquirer = args.inputHandler
@templateFilesHandlerClass = args.templateFilesHandlerClass
# Public Methods
generate: ->
configFileName = await @_configFile()
configRoot =
if configFileName?
path.dirname configFileName
else
options = {
type: 'input'
name: 'projectName'
message: @_inputQuestion()
validate: projectNameValidate
}
options.default = @defaultName if @defaultName?
result = await @inquirer.prompt(options)
@_writeFiles(result.projectName)
@_rootPath()
unless configRoot == @_rootPath()
throw new Error "Config file found in ancestor directory #{configRoot}"
# Direct Public Side-Effect
@options.projectConfig = await @config.loadConfig configRoot
Promise.resolve()
# "Private" Methods
_inputQuestion: () ->
question = "What would you like to name the project?"
if @defaultName?
question = "#{question} (default: \"#{@defaultName}\")"
question
_writeFiles: (name) ->
configFilename = @config.writeDefault @_rootPath(), @_configLanguage(), name
@logger.log "creating #{configFilename} -> contains deployment settings and should be version
controlled"
_configFile: ->
try
fileName = await @config.identifyConfigFileFromPath @_rootPath()
@logger.log "existing #{fileName} found -> skipping creation"
fileName
catch err
debug err
undefined
_configLanguage: ->
@options.configLanguage
# Getters / Setters
@getter 'defaultName', ->
return @nameCandidate if @nameCandidate
nameCandidate = path.basename @_rootPath()
try
@nameCandidate = nameCandidate if projectNameValidate(nameCandidate)
@nameCandidate
module.exports = ConfigGenerator