UNPKG

894 BJavaScriptView Raw
1const lodash = require('lodash');
2
3function callable(object, func) {
4 if (!lodash.isFunction(func)) {
5 throw new Error('except to be function');
6 }
7
8 return new Proxy(func, {
9 getPrototypeOf: () => Object.getPrototypeOf(object),
10 // setPrototypeOf
11 // isExtensible
12 // preventExtensions
13 getOwnPropertyDescriptor: (_, key) => Object.getOwnPropertyDescriptor(object, key),
14 has: (_, key) => Reflect.has(object, key),
15 get: (_, key) => Reflect.get(object, key),
16 set: (_, key, value) => Reflect.set(object, key, value),
17 deleteProperty: (_, key) => Reflect.deleteProperty(object, key),
18 defineProperty: (_, key, attributes) => Reflect.defineProperty(object, key, attributes),
19 enumerate: () => Reflect.enumerate(object),
20 ownKeys: () => Reflect.ownKeys(object),
21 // apply
22 // construct
23 });
24}
25
26module.exports = callable;