js.go (1747B)
1 package js 2 3 import ( 4 "encoding/json" 5 "errors" 6 "github.com/Nordgedanken/matrix_dsl/cmd/lexer" 7 "io/ioutil" 8 "os" 9 "os/exec" 10 ) 11 12 func GenerateBot(mx *lexer.Section) error { 13 14 err := os.MkdirAll("js_project", os.ModeDir) 15 if err != nil { 16 return err 17 } 18 19 packageJson := &pkgJson{} 20 packageJson.Name, err = getName(mx.Properties) 21 if err != nil { 22 return err 23 } 24 25 packageJson.Description, err = getDesc(mx.Properties) 26 if err != nil { 27 return err 28 } 29 30 packageJson.Main = "index.js" 31 32 packageJsonM, err := json.Marshal(packageJson) 33 if err != nil { 34 return err 35 } 36 37 err = ioutil.WriteFile("./js_project/package.json", packageJsonM, 0644) 38 if err != nil { 39 return err 40 } 41 42 cmd := exec.Command("npm", "install", "--save", "matrix-bot-sdk") 43 cmd.Dir = "./js_project" 44 err = cmd.Run() 45 if err != nil { 46 return err 47 } 48 return nil 49 } 50 51 func getName(p []*lexer.PropertyArrays) (string, error) { 52 var name string 53 for _, v := range p { 54 if v.Key == "Name" { 55 if v.Value != nil { 56 name = *v.Value.String 57 } else { 58 return "", errors.New("value of the \"Name\" Key is empty. Please fix the Value to contain a string") 59 } 60 break 61 } 62 } 63 if name == "" { 64 return "", errors.New("value of \"Name\" is empty. Please fix the Value to contain a string") 65 } 66 67 return name, nil 68 } 69 70 func getDesc(p []*lexer.PropertyArrays) (string, error) { 71 var desc string 72 for _, v := range p { 73 if v.Key == "Description" { 74 if v.Value != nil { 75 desc = *v.Value.String 76 } else { 77 return "", errors.New("value of the \"Description\" Key is empty. Please fix the Value to contain a string") 78 } 79 break 80 } 81 } 82 if desc == "" { 83 return "", errors.New("value of \"Description\" is empty. Please fix the Value to contain a string") 84 } 85 86 return desc, nil 87 }