environment.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package surge
  2. import (
  3. "runtime"
  4. C "github.com/sagernet/sing-box/constant"
  5. "github.com/sagernet/sing-box/experimental/locale"
  6. "github.com/sagernet/sing-box/script/jsc"
  7. "github.com/dop251/goja"
  8. )
  9. type Environment struct {
  10. class jsc.Class[*Module, *Environment]
  11. }
  12. func createEnvironment(module *Module) jsc.Class[*Module, *Environment] {
  13. class := jsc.NewClass[*Module, *Environment](module)
  14. class.DefineField("system", (*Environment).getSystem, nil)
  15. class.DefineField("surge-build", (*Environment).getSurgeBuild, nil)
  16. class.DefineField("surge-version", (*Environment).getSurgeVersion, nil)
  17. class.DefineField("language", (*Environment).getLanguage, nil)
  18. class.DefineField("device-model", (*Environment).getDeviceModel, nil)
  19. class.DefineMethod("toString", (*Environment).toString)
  20. return class
  21. }
  22. func (e *Environment) getSystem() any {
  23. switch runtime.GOOS {
  24. case "ios":
  25. return "iOS"
  26. case "darwin":
  27. return "macOS"
  28. case "tvos":
  29. return "tvOS"
  30. case "linux":
  31. return "Linux"
  32. case "android":
  33. return "Android"
  34. case "windows":
  35. return "Windows"
  36. default:
  37. return runtime.GOOS
  38. }
  39. }
  40. func (e *Environment) getSurgeBuild() any {
  41. return "N/A"
  42. }
  43. func (e *Environment) getSurgeVersion() any {
  44. return "sing-box " + C.Version
  45. }
  46. func (e *Environment) getLanguage() any {
  47. return locale.Current().Locale
  48. }
  49. func (e *Environment) getDeviceModel() any {
  50. return "N/A"
  51. }
  52. func (e *Environment) toString(call goja.FunctionCall) any {
  53. return "[sing-box Surge environment"
  54. }