fckeuspy-go/vendor/github.com/hack-pad/go-indexeddb/idb/key_range.go

108 lines
3.0 KiB
Go

//go:build js && wasm
// +build js,wasm
package idb
import (
"syscall/js"
"github.com/hack-pad/safejs"
)
var (
jsIDBKeyRange safejs.Value
)
func init() {
var err error
jsIDBKeyRange, err = safejs.Global().Get("IDBKeyRange")
if err != nil {
panic(err)
}
}
// KeyRange represents a continuous interval over some data type that is used for keys. Records can be retrieved from ObjectStore and Index objects using keys or a range of keys.
type KeyRange struct {
jsKeyRange safejs.Value
}
func wrapKeyRange(jsKeyRange safejs.Value) *KeyRange {
return &KeyRange{jsKeyRange}
}
// NewKeyRangeBound creates a new key range with the specified upper and lower bounds.
// The bounds can be open (that is, the bounds exclude the endpoint values) or closed (that is, the bounds include the endpoint values).
func NewKeyRangeBound(lower, upper js.Value, lowerOpen, upperOpen bool) (*KeyRange, error) {
keyRange, err := jsIDBKeyRange.Call("bound", lower, upper, lowerOpen, upperOpen)
if err != nil {
return nil, tryAsDOMException(err)
}
return wrapKeyRange(keyRange), nil
}
// NewKeyRangeLowerBound creates a new key range with only a lower bound.
func NewKeyRangeLowerBound(lower js.Value, open bool) (*KeyRange, error) {
keyRange, err := jsIDBKeyRange.Call("lowerBound", lower, open)
if err != nil {
return nil, tryAsDOMException(err)
}
return wrapKeyRange(keyRange), nil
}
// NewKeyRangeUpperBound creates a new key range with only an upper bound.
func NewKeyRangeUpperBound(upper js.Value, open bool) (*KeyRange, error) {
keyRange, err := jsIDBKeyRange.Call("upperBound", upper, open)
if err != nil {
return nil, tryAsDOMException(err)
}
return wrapKeyRange(keyRange), nil
}
// NewKeyRangeOnly creates a new key range containing a single value.
func NewKeyRangeOnly(only js.Value) (*KeyRange, error) {
keyRange, err := jsIDBKeyRange.Call("only", only)
if err != nil {
return nil, tryAsDOMException(err)
}
return wrapKeyRange(keyRange), nil
}
// Lower returns the lower bound of the key range.
func (k *KeyRange) Lower() (js.Value, error) {
lower, err := k.jsKeyRange.Get("lower")
return safejs.Unsafe(lower), err
}
// Upper returns the upper bound of the key range.
func (k *KeyRange) Upper() (js.Value, error) {
upper, err := k.jsKeyRange.Get("upper")
return safejs.Unsafe(upper), err
}
// LowerOpen returns false if the lower-bound value is included in the key range.
func (k *KeyRange) LowerOpen() (bool, error) {
lowerOpen, err := k.jsKeyRange.Get("lowerOpen")
if err != nil {
return false, err
}
return lowerOpen.Bool()
}
// UpperOpen returns false if the upper-bound value is included in the key range.
func (k *KeyRange) UpperOpen() (bool, error) {
upperOpen, err := k.jsKeyRange.Get("upperOpen")
if err != nil {
return false, err
}
return upperOpen.Bool()
}
// Includes returns a boolean indicating whether a specified key is inside the key range.
func (k *KeyRange) Includes(key js.Value) (bool, error) {
includes, err := k.jsKeyRange.Call("includes", key)
if err != nil {
return false, tryAsDOMException(err)
}
return includes.Bool()
}