fs.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package js
  2. import (
  3. "github.com/robertkrimen/otto"
  4. "io/ioutil"
  5. )
  6. func readDir(call otto.FunctionCall) otto.Value {
  7. argv := call.ArgumentList
  8. argc := len(argv)
  9. if argc != 1 {
  10. return ReportError("readDir: expected 1 argument, %d given instead.", argc)
  11. }
  12. path := argv[0].String()
  13. dir, err := ioutil.ReadDir(path)
  14. if err != nil {
  15. return ReportError("Could not read directory %s: %s", path, err)
  16. }
  17. entry_list := []string{}
  18. for _, file := range dir {
  19. entry_list = append(entry_list, file.Name())
  20. }
  21. v, err := otto.Otto.ToValue(*call.Otto, entry_list)
  22. if err != nil {
  23. return ReportError("Could not convert to array: %s", err)
  24. }
  25. return v
  26. }
  27. func readFile(call otto.FunctionCall) otto.Value {
  28. argv := call.ArgumentList
  29. argc := len(argv)
  30. if argc != 1 {
  31. return ReportError("readFile: expected 1 argument, %d given instead.", argc)
  32. }
  33. filename := argv[0].String()
  34. raw, err := ioutil.ReadFile(filename)
  35. if err != nil {
  36. return ReportError("Could not read file %s: %s", filename, err)
  37. }
  38. v, err := otto.ToValue(string(raw))
  39. if err != nil {
  40. return ReportError("Could not convert to string: %s", err)
  41. }
  42. return v
  43. }
  44. func writeFile(call otto.FunctionCall) otto.Value {
  45. argv := call.ArgumentList
  46. argc := len(argv)
  47. if argc != 2 {
  48. return ReportError("writeFile: expected 2 arguments, %d given instead.", argc)
  49. }
  50. filename := argv[0].String()
  51. data := argv[1].String()
  52. err := ioutil.WriteFile(filename, []byte(data), 0644)
  53. if err != nil {
  54. return ReportError("Could not write %d bytes to %s: %s", len(data), filename, err)
  55. }
  56. return otto.NullValue()
  57. }