strings.go raw

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