global.go 931 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. //go:build js && wasm
  2. package safejs
  3. import (
  4. "fmt"
  5. "syscall/js"
  6. )
  7. // Global returns the JavaScript global object, usually "window" or "global".
  8. func Global() Value {
  9. return Safe(js.Global())
  10. }
  11. // MustGetGlobal fetches the given global, then verifies it is truthy. Panics on error or falsy values.
  12. // This is intended for simple global variable initialization, like preparing classes for later instantiation.
  13. //
  14. // For example:
  15. //
  16. // var jsUint8Array = safejs.MustGetGlobal("Uint8Array")
  17. func MustGetGlobal(property string) Value {
  18. value, err := getGlobal(property)
  19. if err != nil {
  20. panic(err)
  21. }
  22. return value
  23. }
  24. func getGlobal(property string) (Value, error) {
  25. value, err := Global().Get(property)
  26. if err != nil {
  27. return Value{}, err
  28. }
  29. truthy, err := value.Truthy()
  30. if err != nil {
  31. return Value{}, err
  32. }
  33. if !truthy {
  34. return Value{}, fmt.Errorf("global %q is not defined", property)
  35. }
  36. return value, nil
  37. }