strings.go 966 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. //go:build js && wasm
  2. // +build js,wasm
  3. package idb
  4. import (
  5. "github.com/hack-pad/safejs"
  6. )
  7. func sliceFromStrings(strs []string) []interface{} {
  8. values := make([]interface{}, 0, len(strs))
  9. for _, s := range strs {
  10. values = append(values, s)
  11. }
  12. return values
  13. }
  14. func stringsFromArray(arr safejs.Value) ([]string, error) {
  15. var strs []string
  16. iterErr := iterArray(arr, func(i int, value safejs.Value) (bool, error) {
  17. str, err := value.String()
  18. if err != nil {
  19. return false, err
  20. }
  21. strs = append(strs, str)
  22. return true, nil
  23. })
  24. return strs, iterErr
  25. }
  26. func iterArray(arr safejs.Value, visit func(i int, value safejs.Value) (keepGoing bool, visitErr error)) (err error) {
  27. length, err := arr.Length()
  28. if err != nil {
  29. return err
  30. }
  31. for i := 0; i < length; i++ {
  32. index, err := arr.Index(i)
  33. if err != nil {
  34. return err
  35. }
  36. keepGoing, visitErr := visit(i, index)
  37. if !keepGoing || visitErr != nil {
  38. return visitErr
  39. }
  40. }
  41. return nil
  42. }