MCPcopy Create free account
hub / github.com/dop251/goja / proxyOwnKeys

Method proxyOwnKeys

proxy.go:789–836  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

787}
788
789func (p *proxyObject) proxyOwnKeys() ([]Value, bool) {
790 target := p.target
791 if v, ok := p.checkHandler().ownKeys(target); ok {
792 keys := p.val.runtime.toObject(v)
793 var keyList []Value
794 var keySet propNameSet
795 l := toLength(keys.self.getStr("length", nil))
796 for k := int64(0); k < l; k++ {
797 item := keys.self.getIdx(valueInt(k), nil)
798 if _, ok := item.(String); !ok {
799 if _, ok := item.(*Symbol); !ok {
800 panic(p.val.runtime.NewTypeError("%s is not a valid property name", item.String()))
801 }
802 }
803 if keySet.has(item) {
804 panic(p.val.runtime.NewTypeError("'ownKeys' on proxy: trap returned duplicate entries"))
805 }
806 keyList = append(keyList, item)
807 keySet.add(item)
808 }
809 ext := target.self.isExtensible()
810 for item, next := target.self.iterateKeys()(); next != nil; item, next = next() {
811 if keySet.has(item.name) {
812 keySet.delete(item.name)
813 } else {
814 if !ext {
815 panic(p.val.runtime.NewTypeError("'ownKeys' on proxy: trap result did not include '%s'", item.name.String()))
816 }
817 var prop Value
818 if item.value == nil {
819 prop = target.getOwnProp(item.name)
820 } else {
821 prop = item.value
822 }
823 if prop, ok := prop.(*valueProperty); ok && !prop.configurable {
824 panic(p.val.runtime.NewTypeError("'ownKeys' on proxy: trap result did not include non-configurable '%s'", item.name.String()))
825 }
826 }
827 }
828 if !ext && len(keyList) > 0 && keySet.size() > 0 {
829 panic(p.val.runtime.NewTypeError("'ownKeys' on proxy: trap returned extra keys but proxy target is non-extensible"))
830 }
831
832 return keyList, true
833 }
834
835 return nil, false
836}
837
838func (p *proxyObject) iterateStringKeys() iterNextFunc {
839 return (&proxyPropIter{

Callers 3

keysMethod · 0.95
stringKeysMethod · 0.95
symbolsMethod · 0.95

Calls 15

checkHandlerMethod · 0.95
hasMethod · 0.95
addMethod · 0.95
deleteMethod · 0.95
sizeMethod · 0.95
toLengthFunction · 0.85
valueIntTypeAlias · 0.85
NewTypeErrorMethod · 0.80
getOwnPropMethod · 0.80
ownKeysMethod · 0.65
toObjectMethod · 0.65
getStrMethod · 0.65

Tested by

no test coverage detected