UNPKG

861 BJavaScriptView Raw
1import { typeOf } from "./helpers.js"
2
3export const proxy = (root, callback) => {
4 let proxyCache = new WeakMap()
5
6 function createProxy(target, handler) {
7 let proxy = proxyCache.get(target)
8 if (proxy === undefined) {
9 proxy = new Proxy(target, handler)
10 proxyCache.set(target, proxy)
11 }
12 return proxy
13 }
14
15 const handler = {
16 get(target, property) {
17 if (["Object", "Array"].includes(typeOf(target[property]))) {
18 return createProxy(target[property], handler)
19 } else {
20 return Reflect.get(...arguments)
21 }
22 },
23 set(target, property, value) {
24 if (value === target[property]) return true
25
26 callback()
27 return Reflect.set(...arguments)
28 },
29 deleteProperty() {
30 callback()
31 return Reflect.deleteProperty(...arguments)
32 },
33 }
34
35 return new Proxy(root, handler)
36}