@synstack/enhance
Version:
Type-safe object enhancement with proxy-based method extension
23 lines • 781 B
JavaScript
// src/enhance.lib.ts
var ENHANCER_NAME = Symbol("EnhancerName");
var enhance = (name, obj, extendObj) => {
const _obj = ENHANCER_NAME in obj && obj[ENHANCER_NAME] === name ? obj.$ : obj;
return new Proxy(_obj, {
get(target, prop, receiver) {
if (prop === "$" || prop === "valueOf" || prop === Symbol.toPrimitive)
return () => _obj;
if (prop === "toString") return () => obj.toString();
if (prop === ENHANCER_NAME) return name;
if (prop in extendObj)
return extendObj[prop].bind(target);
return Reflect.get(target, prop, receiver);
}
});
};
var enhanceFactory = (name, extendObj) => (obj) => enhance(name, obj, extendObj);
export {
ENHANCER_NAME,
enhance,
enhanceFactory
};
//# sourceMappingURL=enhance.index.js.map