// start starts the job func (e *Plugin) start() { if e.config.Username == "" || e.config.Password == "" { e.logger.Println("Error before running alm-tools. You have to set username & password for security reasons, otherwise this plugin won't run.") return } if !npm.Exists("alm/bin/alm") { e.logger.Println("Installing alm-tools, please wait...") res := npm.Install("alm") if res.Error != nil { e.logger.Print(res.Error.Error()) return } e.logger.Print(res.Message) } cmd := utils.CommandBuilder("node", npm.Abs("alm/src/server.js")) cmd.AppendArguments("-a", e.config.Username+":"+e.config.Password, "-h", e.config.Host, "-t", strconv.Itoa(e.config.Port), "-d", e.config.WorkingDir[0:len(e.config.WorkingDir)-1]) // for auto-start in the browser: cmd.AppendArguments("-o") if e.keyfile != "" && e.certfile != "" { cmd.AppendArguments("--httpskey", e.keyfile, "--httpscert", e.certfile) } //For debug only: //cmd.Stdout = os.Stdout //cmd.Stderr = os.Stderr //os.Stdin = os.Stdin err := cmd.Start() if err != nil { e.logger.Println("Error while running alm-tools. Trace: " + err.Error()) return } //we lose the internal error handling but ok... e.logger.Printf("Editor is running at %s:%d | %s", e.config.Host, e.config.Port, e.config.WorkingDir) }
func (t *Plugin) start() { defaultCompilerArgs := t.options.Tsconfig.CompilerArgs() //these will be used if no .tsconfig found. if t.hasTypescriptFiles() { //Can't check if permission denied returns always exists = true.... //typescriptModule := out + string(os.PathSeparator) + "typescript" + string(os.PathSeparator) + "bin" if !npm.Exists(t.options.Bin) { t.logger.Println("Installing typescript, please wait...") res := npm.Install("typescript") if res.Error != nil { t.logger.Print(res.Error.Error()) return } t.logger.Print(res.Message) } projects := t.getTypescriptProjects() if len(projects) > 0 { watchedProjects := 0 //typescript project (.tsconfig) found for _, project := range projects { cmd := utils.CommandBuilder("node", t.options.Bin, "-p", project[0:strings.LastIndex(project, utils.PathSeparator)]) //remove the /tsconfig.json) projectConfig := FromFile(project) if projectConfig.CompilerOptions.Watch { watchedProjects++ // if has watch : true then we have to wrap the command to a goroutine (I don't want to use the .Start here) go func() { _, err := cmd.Output() if err != nil { t.logger.Println(err.Error()) return } }() } else { _, err := cmd.Output() if err != nil { t.logger.Println(err.Error()) return } } } t.logger.Printf("%d Typescript project(s) compiled ( %d monitored by a background file watcher ) ", len(projects), watchedProjects) } else { //search for standalone typescript (.ts) files and compile them files := t.getTypescriptFiles() if len(files) > 0 { watchedFiles := 0 if t.options.Tsconfig.CompilerOptions.Watch { watchedFiles = len(files) } //it must be always > 0 if we came here, because of if hasTypescriptFiles == true. for _, file := range files { cmd := utils.CommandBuilder("node", t.options.Bin) cmd.AppendArguments(defaultCompilerArgs...) cmd.AppendArguments(file) _, err := cmd.Output() cmd.Args = cmd.Args[0 : len(cmd.Args)-1] //remove the last, which is the file if err != nil { t.logger.Println(err.Error()) return } } t.logger.Printf("%d Typescript file(s) compiled ( %d monitored by a background file watcher )", len(files), watchedFiles) } } //editor activation if len(projects) == 1 && t.options.Editor != nil { dir := projects[0][0:strings.LastIndex(projects[0], utils.PathSeparator)] t.options.Editor.Dir(dir) t.pluginContainer.Add(t.options.Editor) } } }