func openLogFile(Datadir string, filename string) *os.File { path := common.AbsolutePath(Datadir, filename) file, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if err != nil { panic(fmt.Sprintf("error opening log file '%s': %v", filename, err)) } return file }
// Exec(file) loads and runs the contents of a file // if a relative path is given, the jsre's assetPath is used func (self *JSRE) Exec(file string) error { code, err := ioutil.ReadFile(common.AbsolutePath(self.assetPath, file)) if err != nil { return err } self.do(func(vm *otto.Otto) { _, err = vm.Run(code) }) return err }
// preloadJSFiles loads JS files that the user has specified with ctx.PreLoadJSFlag into // the JSRE. If not all files could be loaded it will return an error describing the error. func (self *jsre) preloadJSFiles(ctx *cli.Context) error { if ctx.GlobalString(utils.PreLoadJSFlag.Name) != "" { assetPath := ctx.GlobalString(utils.JSpathFlag.Name) jsFiles := strings.Split(ctx.GlobalString(utils.PreLoadJSFlag.Name), ",") for _, file := range jsFiles { filename := common.AbsolutePath(assetPath, strings.TrimSpace(file)) if err := self.re.Exec(filename); err != nil { return fmt.Errorf("%s: %v", file, jsErrorString(err)) } } } return nil }
// MakeConsolePreloads retrieves the absolute paths for the console JavaScript // scripts to preload before starting. func MakeConsolePreloads(ctx *cli.Context) []string { // Skip preloading if there's nothing to preload if ctx.GlobalString(PreloadJSFlag.Name) == "" { return nil } // Otherwise resolve absolute paths and return them preloads := []string{} assets := ctx.GlobalString(JSpathFlag.Name) for _, file := range strings.Split(ctx.GlobalString(PreloadJSFlag.Name), ",") { preloads = append(preloads, common.AbsolutePath(assets, strings.TrimSpace(file))) } return preloads }
// Exec(file) loads and runs the contents of a file // if a relative path is given, the jsre's assetPath is used func (self *JSRE) Exec(file string) error { code, err := ioutil.ReadFile(common.AbsolutePath(self.assetPath, file)) if err != nil { return err } var script *otto.Script self.Do(func(vm *otto.Otto) { script, err = vm.Compile(file, code) if err != nil { return } _, err = vm.Run(script) }) return err }
// loadScript executes a JS script from inside the currently executing JS code. func (self *JSRE) loadScript(call otto.FunctionCall) otto.Value { file, err := call.Argument(0).ToString() if err != nil { // TODO: throw exception return otto.FalseValue() } file = common.AbsolutePath(self.assetPath, file) source, err := ioutil.ReadFile(file) if err != nil { // TODO: throw exception return otto.FalseValue() } if _, err := compileAndRun(call.Otto, file, source); err != nil { // TODO: throw exception fmt.Println("err:", err) return otto.FalseValue() } // TODO: return evaluation result return otto.TrueValue() }
// circumvents the eval queue, see runEventLoop func (self *JSRE) execWithoutEQ(file string) error { return self.exec(common.AbsolutePath(self.assetPath, file), false) }
// Exec(file) loads and runs the contents of a file // if a relative path is given, the jsre's assetPath is used func (self *JSRE) Exec(file string) error { return self.exec(common.AbsolutePath(self.assetPath, file), true) }