github.hscsec.cn/aerogo/aero@v1.0.0/cmd/aero/main.go (about)

     1  package main
     2  
     3  import (
     4  	"encoding/json"
     5  	"flag"
     6  	"fmt"
     7  	"io/ioutil"
     8  	"os"
     9  	"path/filepath"
    10  
    11  	"github.com/aerogo/aero"
    12  
    13  	"github.com/fatih/color"
    14  )
    15  
    16  var newApp bool
    17  
    18  // Shell flags
    19  func init() {
    20  	flag.BoolVar(&newApp, "newapp", false, "Creates the basic structure of a new app in an empty directory")
    21  }
    22  
    23  // Main
    24  func main() {
    25  	flag.Parse()
    26  
    27  	if !newApp {
    28  		flag.Usage()
    29  		return
    30  	}
    31  
    32  	faint := color.New(color.Faint).SprintFunc()
    33  
    34  	color.Yellow("Creating new app...")
    35  	println()
    36  
    37  	fmt.Println(color.GreenString(" ✔ "), ".gitignore")
    38  	gitignore()
    39  
    40  	fmt.Println(color.GreenString(" ✔ "), "config.json")
    41  	config()
    42  
    43  	fmt.Println(color.GreenString(" ✔ "), "tsconfig.json")
    44  	tsconfig()
    45  
    46  	fmt.Println(color.GreenString(" ✔ "), "main.go")
    47  	mainFile()
    48  
    49  	fmt.Println(color.GreenString(" ✔ "), "main_test.go")
    50  	mainTestFile()
    51  
    52  	fmt.Println(color.GreenString(" ✔ "), faint("layout"))
    53  	createDirectory("layout")
    54  
    55  	fmt.Println(color.GreenString(" ✔ "), faint("pages"))
    56  	createDirectory("pages")
    57  
    58  	fmt.Println(color.GreenString(" ✔ "), faint("scripts"))
    59  	createDirectory("scripts")
    60  	panicOnError(ioutil.WriteFile("scripts/main.ts", []byte(`console.log("Hello World")`), 0644))
    61  
    62  	fmt.Println(color.GreenString(" ✔ "), faint("security"))
    63  	createDirectory("security")
    64  	gitignoreAll("security")
    65  
    66  	fmt.Println(color.GreenString(" ✔ "), faint("styles"))
    67  	createDirectory("styles")
    68  
    69  	println()
    70  	color.Green("Finished.")
    71  }
    72  
    73  func createDirectory(name string) {
    74  	err := os.Mkdir(name, 0777)
    75  
    76  	if err != nil && !os.IsExist(err) {
    77  		panic(err)
    78  	}
    79  }
    80  
    81  func mainFile() {
    82  	err := ioutil.WriteFile("main.go", []byte(mainCode), 0644)
    83  	panicOnError(err)
    84  }
    85  
    86  func mainTestFile() {
    87  	err := ioutil.WriteFile("main_test.go", []byte(mainTestCode), 0644)
    88  	panicOnError(err)
    89  }
    90  
    91  func config() {
    92  	config := aero.Configuration{}
    93  	config.Reset()
    94  	config.Styles = []string{}
    95  	config.Fonts = []string{}
    96  	config.Push = []string{}
    97  	config.Scripts.Main = "main"
    98  	bytes, err := json.MarshalIndent(config, "", "\t")
    99  	panicOnError(err)
   100  
   101  	err = ioutil.WriteFile("config.json", bytes, 0644)
   102  	panicOnError(err)
   103  }
   104  
   105  func tsconfig() {
   106  	err := ioutil.WriteFile("tsconfig.json", []byte(tsconfigText), 0644)
   107  	panicOnError(err)
   108  }
   109  
   110  func gitignoreAll(directory string) {
   111  	err := ioutil.WriteFile(directory+"/.gitignore", []byte("*"), 0644)
   112  	panicOnError(err)
   113  }
   114  
   115  func gitignore() {
   116  	// Ignore current directory name as binary
   117  	wd, err := os.Getwd()
   118  	panicOnError(err)
   119  
   120  	binaryName := "/" + filepath.Base(wd)
   121  	err = ioutil.WriteFile(".gitignore", []byte(gitignoreText+"\n"+binaryName+"\n"), 0644)
   122  	panicOnError(err)
   123  }
   124  
   125  func panicOnError(err error) {
   126  	if err != nil {
   127  		panic(err)
   128  	}
   129  }