UNPKG

di-tory

Version:

Compose applications with dependency injection

51 lines (50 loc) 1.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.proxy = exports.NoClass = exports.noop = void 0; 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); }, }); const noop = () => { }; exports.noop = noop; class NoClass { } exports.NoClass = NoClass; const proxy = (resolver, dummyTarget = {}) => createProxy(resolver, dummyTarget); exports.proxy = proxy; exports.proxy.fn = (resolver) => (0, exports.proxy)(resolver, exports.noop); exports.proxy.constructor = (resolver) => (0, exports.proxy)(resolver, NoClass);