UNPKG

1.05 kBJavaScriptView 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
26function withoutNew(Class) {
27 return new Proxy(Class, { apply: (_, __, params) => new Class(...params) });
28}
29
30module.exports = callable;
31module.exports.withoutNew = withoutNew;