UNPKG

974 BJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5var helpers = require('./helpers.js');
6
7const proxy = (root, callback) => {
8 let proxyCache = new WeakMap();
9
10 function createProxy(target, handler) {
11 let proxy = proxyCache.get(target);
12 if (proxy === undefined) {
13 proxy = new Proxy(target, handler);
14 proxyCache.set(target, proxy);
15 }
16 return proxy
17 }
18
19 const handler = {
20 get(target, property) {
21 if (["Object", "Array"].includes(helpers.typeOf(target[property]))) {
22 return createProxy(target[property], handler)
23 } else {
24 return Reflect.get(...arguments)
25 }
26 },
27 set(target, property, value) {
28 if (value === target[property]) return true
29
30 callback();
31 return Reflect.set(...arguments)
32 },
33 deleteProperty() {
34 callback();
35 return Reflect.deleteProperty(...arguments)
36 },
37 };
38
39 return new Proxy(root, handler)
40};
41
42exports.proxy = proxy;