@litexa/core
Version:
Litexa, a programming language for writing Alexa skills
66 lines (52 loc) • 1.95 kB
text/coffeescript
###
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
###
fs = require 'fs'
mkdirp = require 'mkdirp'
path = require 'path'
Generator = require('./generator')
class SourceCodeGenerator extends Generator
@description: 'litexa entry point'
constructor: (args) ->
super(args)
@bundlingStrategy = @options.bundlingStrategy
@projectInfoClass = args.projectInfoClass
@templateFilesHandlerClass = args.templateFilesHandlerClass
@directoryCreatorClass = args.directoryCreatorClass
# Public Interface
generate: ->
# Create the Directory Structure
directoryStructureCreator = new @directoryCreatorClass({
bundlingStrategy: @bundlingStrategy
logger: @logger
rootPath: @_rootPath()
templateFilesHandlerClass: @templateFilesHandlerClass
sourceLanguage: @_language()
projectName: @options.projectConfig.name
})
directoryStructureCreator.create()
# Sync the Project Files
unless @_hasLitexaCode()
@logger.log "no code files found in litexa -> creating them"
directoryStructureCreator.sync()
else
@logger.log "existing code files found in litexa -> skipping creation"
Promise.resolve()
_hasLitexaCode: ->
return @foundLitexaCode if @foundLitexaCode?
projectInfo = new @projectInfoClass { jsonConfig: @_projectConfig() }
for languageName, language of projectInfo.languages
for file in language.code.files
if file.indexOf('.litexa') > 0
@foundLitexaCode = true
break
@foundLitexaCode
_projectConfig: ->
@options.projectConfig
_language: ->
return @language if @language?
@language = @options.sourceLanguage
module.exports = SourceCodeGenerator