| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- //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()
- }
|