MCPcopy
hub / github.com/vuejs/composition-api / defineAccessControl

Function defineAccessControl

src/reactivity/reactive.ts:65–114  ·  view source on GitHub ↗
(target: AnyObject, key: any, val?: any)

Source from the content-addressed store, hash-verified

63 * Auto unwrapping when access property
64 */
65export function defineAccessControl(target: AnyObject, key: any, val?: any) {
66 if (key === '__ob__') return
67 if (isRaw(target[key])) return
68
69 let getter: (() => any) | undefined
70 let setter: ((x: any) => void) | undefined
71 const property = Object.getOwnPropertyDescriptor(target, key)
72 if (property) {
73 if (property.configurable === false) {
74 return
75 }
76 getter = property.get
77 setter = property.set
78 if (
79 (!getter || setter) /* not only have getter */ &&
80 arguments.length === 2
81 ) {
82 val = target[key]
83 }
84 }
85
86 setupAccessControl(val)
87 proxy(target, key, {
88 get: function getterHandler() {
89 const value = getter ? getter.call(target) : val
90 // if the key is equal to RefKey, skip the unwrap logic
91 if (key !== RefKey && isRef(value)) {
92 return value.value
93 } else {
94 return value
95 }
96 },
97 set: function setterHandler(newVal: any) {
98 if (getter && !setter) return
99
100 // If the key is equal to RefKey, skip the unwrap logic
101 // If and only if "value" is ref and "newVal" is not a ref,
102 // the assignment should be proxied to "value" ref.
103 if (key !== RefKey && isRef(val) && !isRef(newVal)) {
104 val.value = newVal
105 } else if (setter) {
106 setter.call(target, newVal)
107 val = newVal
108 } else {
109 val = newVal
110 }
111 setupAccessControl(newVal)
112 },
113 })
114}
115
116export function observe<T>(obj: T): T {
117 const Vue = getRegisteredVueOrDefault()

Callers 2

setFunction · 0.90
setupAccessControlFunction · 0.85

Calls 4

proxyFunction · 0.90
isRefFunction · 0.90
isRawFunction · 0.85
setupAccessControlFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…