matrix-dsl

A simple DSL for fast generation of Matrix Bots or Application Services
git clone git://archive.git.mtrnord.blog/Nordgedanken/matrix-dsl.git
Log | Files | Refs | LICENSE

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 }