UNPKG

di-tory

Version:

Compose applications with dependency injection

45 lines (44 loc) 1.55 kB
const createProxy = (resolver, dummyTarget) => (module) => new Proxy(dummyTarget, { get: (_, prop) => { const target = resolver(module); const value = target[prop]; return typeof value === 'function' ? value.bind(target) : value; }, set: (_, prop, value) => { const target = resolver(module); target[prop] = value; return true; }, deleteProperty: (_, prop) => { const target = resolver(module); delete target[prop]; return true; }, has: (_, prop) => Object.prototype.hasOwnProperty.call(resolver(module), prop), ownKeys: () => { const target = resolver(module); return [ ...Object.getOwnPropertyNames(target), ...Object.getOwnPropertySymbols(target), ]; }, getOwnPropertyDescriptor: (_, prop) => Object.getOwnPropertyDescriptor(resolver(module), prop), defineProperty: (_, prop, descriptor) => { Object.defineProperty(resolver(module), prop, descriptor); return true; }, apply: (_, thisArg, args) => { const target = resolver(module); return target.apply(thisArg, args); }, construct: (_, args) => { const target = resolver(module); return new target(...args); }, }); export const noop = () => { }; export class NoClass { } export const proxy = (resolver, dummyTarget = {}) => createProxy(resolver, dummyTarget); proxy.fn = (resolver) => proxy(resolver, noop); proxy.constructor = (resolver) => proxy(resolver, NoClass);