surrogate
Version:
Object method hooks made easy
70 lines (59 loc) • 2.84 kB
JavaScript
var $dfb11eba45cfc4c9$exports = require("./surrogate.0c726199.js");
var $b4a665151c5432f8$exports = require("./surrogate.91ed3378.js");
var $468325e593d32835$exports = require("./surrogate.a4731d49.js");
var $69e6bb98e7bc51ac$exports = require("./surrogate.5de640eb.js");
var $f0d4a8303771b746$exports = require("./surrogate.5c5e39cf.js");
function $parcel$export(e, n, v, s) {
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
}
$parcel$export(module.exports, "SurrogateProxy", () => $4bb808266ae73c8a$export$98c317ab89d9c127);
class $4bb808266ae73c8a$export$98c317ab89d9c127 {
constructor(target, { useSingleton: useSingleton = true, ...globalOptions } = {}){
this.targets = new WeakMap();
return this.useInstance(useSingleton).setTarget(target, globalOptions);
}
get(target, event, receiver) {
return (0, $dfb11eba45cfc4c9$exports.FetchRuleRunner).fetchRule(this, target, event, receiver).returnableValue();
}
getEventManager(target) {
return this.targets.get(target);
}
static wrap(object, options) {
return this.hasTarget(object) ? object : new Proxy(object, new $4bb808266ae73c8a$export$98c317ab89d9c127(object, options));
}
static hasTarget(target) {
const methods = [
(0, $dfb11eba45cfc4c9$exports.InternalMethods).Dispose,
(0, $dfb11eba45cfc4c9$exports.InternalMethods).EventManager
];
return methods.every((key)=>(0, $69e6bb98e7bc51ac$exports.isFunction)(target[key]));
}
bindHandler(event, target, receiver) {
const func = Reflect.get(target, event, receiver);
return ({
[event]: (...args)=>this.surrogateHandler(new (0, $f0d4a8303771b746$exports.Context)(target, receiver, event, func, args))
})[event];
}
surrogateHandler(context) {
const { target: target, event: event } = context;
const typeContainers = this.getEventManager(target).getEventHandlers(event);
return (0, $b4a665151c5432f8$exports.ExecutionContext).for(context, typeContainers).setupPipeline(this, typeContainers).start();
}
dispose(target) {
this.getEventManager(target).deregisterHooks();
this.targets.delete(target);
return target;
}
setTarget(target, globalOptions) {
if (!this.targets.has(target)) this.targets.set(target, new (0, $468325e593d32835$exports.EventManager)(globalOptions));
return this;
}
useInstance(useSingleton) {
if (useSingleton) {
if ($4bb808266ae73c8a$export$98c317ab89d9c127.instance) return $4bb808266ae73c8a$export$98c317ab89d9c127.instance;
$4bb808266ae73c8a$export$98c317ab89d9c127.instance = this;
}
return this;
}
}
//# sourceMappingURL=surrogate.e6214bab.js.map