di-tory
Version:
Compose applications with dependency injection
51 lines (50 loc) • 1.79 kB
JavaScript
;
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);